<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::NormalDistributionsTransform&lt; PointSource, PointTarget &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1_normal_distributions_transform.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-types">Public 类型</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pub-static-methods">静态 Public 成员函数</a> &#124;
<a href="#pro-types">Protected 类型</a> &#124;
<a href="#pro-methods">Protected 成员函数</a> &#124;
<a href="#pro-attribs">Protected 属性</a> &#124;
<a href="classpcl_1_1_normal_distributions_transform-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::NormalDistributionsTransform&lt; PointSource, PointTarget &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p>A 3D <a class="el" href="structpcl_1_1_normal.html" title="A point structure representing normal coordinates and the surface curvature estimate....">Normal</a> Distribution Transform registration implementation for point cloud data.  
 <a href="classpcl_1_1_normal_distributions_transform.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="ndt_8h_source.html">ndt.h</a>&gt;</code></p>
<div class="dynheader">
类 pcl::NormalDistributionsTransform&lt; PointSource, PointTarget &gt; 继承关系图:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classpcl_1_1_normal_distributions_transform.png" usemap="#pcl::NormalDistributionsTransform_3C_20PointSource_2C_20PointTarget_20_3E_map" alt=""/>
  <map id="pcl::NormalDistributionsTransform_3C_20PointSource_2C_20PointTarget_20_3E_map" name="pcl::NormalDistributionsTransform_3C_20PointSource_2C_20PointTarget_20_3E_map">
<area href="classpcl_1_1_registration.html" title="Registration represents the base registration class for general purpose, ICP-like methods." alt="pcl::Registration&lt; PointSource, PointTarget, Scalar &gt;" shape="rect" coords="0,56,367,80"/>
<area href="classpcl_1_1_p_c_l_base.html" alt="pcl::PCLBase&lt; PointSource &gt;" shape="rect" coords="0,0,367,24"/>
  </map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public 类型</h2></td></tr>
<tr class="memitem:aa8b4b6147b12649200bcbaf5521a4f6f"><td class="memItemLeft" align="right" valign="top"><a id="aa8b4b6147b12649200bcbaf5521a4f6f"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_normal_distributions_transform.html">NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:aa8b4b6147b12649200bcbaf5521a4f6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa9b617a12ab87ffcaa5a8ef1a7ee5baa"><td class="memItemLeft" align="right" valign="top"><a id="aa9b617a12ab87ffcaa5a8ef1a7ee5baa"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_normal_distributions_transform.html">NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:aa9b617a12ab87ffcaa5a8ef1a7ee5baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_registration"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_registration')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_registration.html">pcl::Registration&lt; PointSource, PointTarget, Scalar &gt;</a></td></tr>
<tr class="memitem:a1917aa6cebe00e615553655522e8f851 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a1917aa6cebe00e615553655522e8f851"></a>
typedef Eigen::Matrix&lt; Scalar, 4, 4 &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Matrix4</b></td></tr>
<tr class="separator:a1917aa6cebe00e615553655522e8f851 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a101ced9777ccf8ca067d2b6bb6d209d6 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a101ced9777ccf8ca067d2b6bb6d209d6"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_registration.html">Registration</a>&lt; PointSource, PointTarget, Scalar &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Ptr</b></td></tr>
<tr class="separator:a101ced9777ccf8ca067d2b6bb6d209d6 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30862684660b99ba01cdfbec4dfbc7e1 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a30862684660b99ba01cdfbec4dfbc7e1"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_registration.html">Registration</a>&lt; PointSource, PointTarget, Scalar &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>ConstPtr</b></td></tr>
<tr class="separator:a30862684660b99ba01cdfbec4dfbc7e1 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1e81ff894bb7e879ca821ade766ec16 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ac1e81ff894bb7e879ca821ade766ec16"></a>
typedef pcl::registration::CorrespondenceRejector::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>CorrespondenceRejectorPtr</b></td></tr>
<tr class="separator:ac1e81ff894bb7e879ca821ade766ec16 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae46cd2323712412e133e17f8863a5f03 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ae46cd2323712412e133e17f8863a5f03"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree</a>&lt; PointTarget &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>KdTree</b></td></tr>
<tr class="separator:ae46cd2323712412e133e17f8863a5f03 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a06fce1e17a013422e5b04de4c1802562 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a06fce1e17a013422e5b04de4c1802562"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree</a>&lt; PointTarget &gt;::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreePtr</b></td></tr>
<tr class="separator:a06fce1e17a013422e5b04de4c1802562 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa19c3b030967b37a754c81e4eee21283 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="aa19c3b030967b37a754c81e4eee21283"></a>
typedef <a class="el" href="classpcl_1_1search_1_1_kd_tree.html">pcl::search::KdTree</a>&lt; PointSource &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreeReciprocal</b></td></tr>
<tr class="separator:aa19c3b030967b37a754c81e4eee21283 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f0f0491e3e0a1fe0afecb34b1751f7c inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a8f0f0491e3e0a1fe0afecb34b1751f7c"></a>
typedef KdTreeReciprocal::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>KdTreeReciprocalPtr</b></td></tr>
<tr class="separator:a8f0f0491e3e0a1fe0afecb34b1751f7c inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0637a59a403120aa012d9fa68c1d492 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="af0637a59a403120aa012d9fa68c1d492"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointSource &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSource</b></td></tr>
<tr class="separator:af0637a59a403120aa012d9fa68c1d492 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a294ef918cbe14cb3024033e8a7cb1f01 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a294ef918cbe14cb3024033e8a7cb1f01"></a>
typedef PointCloudSource::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSourcePtr</b></td></tr>
<tr class="separator:a294ef918cbe14cb3024033e8a7cb1f01 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae8517d707e8ef7d97e4a6d815f68796 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="aae8517d707e8ef7d97e4a6d815f68796"></a>
typedef PointCloudSource::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSourceConstPtr</b></td></tr>
<tr class="separator:aae8517d707e8ef7d97e4a6d815f68796 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a024693ed432e3cd1c8341d8e2f15b094 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a024693ed432e3cd1c8341d8e2f15b094"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointTarget &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTarget</b></td></tr>
<tr class="separator:a024693ed432e3cd1c8341d8e2f15b094 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4bf5516a047e734bcb227d027871c11 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ad4bf5516a047e734bcb227d027871c11"></a>
typedef PointCloudTarget::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTargetPtr</b></td></tr>
<tr class="separator:ad4bf5516a047e734bcb227d027871c11 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf1fc7a0490db8d11553874b8d96c6c3 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="abf1fc7a0490db8d11553874b8d96c6c3"></a>
typedef PointCloudTarget::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTargetConstPtr</b></td></tr>
<tr class="separator:abf1fc7a0490db8d11553874b8d96c6c3 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abffdcb0783ce57c28a906c244f56feb5 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="abffdcb0783ce57c28a906c244f56feb5"></a>
typedef KdTree::PointRepresentationConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointRepresentationConstPtr</b></td></tr>
<tr class="separator:abffdcb0783ce57c28a906c244f56feb5 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a202062f8fbf59254dbbe0d2810bac86b inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a202062f8fbf59254dbbe0d2810bac86b"></a>
typedef <a class="el" href="classpcl_1_1registration_1_1_transformation_estimation.html">pcl::registration::TransformationEstimation</a>&lt; PointSource, PointTarget, Scalar &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>TransformationEstimation</b></td></tr>
<tr class="separator:a202062f8fbf59254dbbe0d2810bac86b inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a881e0a331909edae6a755a1595d0a4bf inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a881e0a331909edae6a755a1595d0a4bf"></a>
typedef TransformationEstimation::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>TransformationEstimationPtr</b></td></tr>
<tr class="separator:a881e0a331909edae6a755a1595d0a4bf inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a646ad11e179db2fc42cdf30e0cd30bf6 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a646ad11e179db2fc42cdf30e0cd30bf6"></a>
typedef TransformationEstimation::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>TransformationEstimationConstPtr</b></td></tr>
<tr class="separator:a646ad11e179db2fc42cdf30e0cd30bf6 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ac2cc8f12fb04be29c9697cab749814 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a9ac2cc8f12fb04be29c9697cab749814"></a>
typedef <a class="el" href="classpcl_1_1registration_1_1_correspondence_estimation_base.html">pcl::registration::CorrespondenceEstimationBase</a>&lt; PointSource, PointTarget, Scalar &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>CorrespondenceEstimation</b></td></tr>
<tr class="separator:a9ac2cc8f12fb04be29c9697cab749814 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a0b7973990a95858e1640a1729137b9 inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a1a0b7973990a95858e1640a1729137b9"></a>
typedef CorrespondenceEstimation::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>CorrespondenceEstimationPtr</b></td></tr>
<tr class="separator:a1a0b7973990a95858e1640a1729137b9 inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2ffc3aee341010bc07523c5e9dd507b inherit pub_types_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ab2ffc3aee341010bc07523c5e9dd507b"></a>
typedef CorrespondenceEstimation::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>CorrespondenceEstimationConstPtr</b></td></tr>
<tr class="separator:ab2ffc3aee341010bc07523c5e9dd507b inherit pub_types_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 类型 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointSource &gt;</a></td></tr>
<tr class="memitem:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae2f6f6863a73337858b7a7a054eaae4f"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointSource &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloud</b></td></tr>
<tr class="separator:ae2f6f6863a73337858b7a7a054eaae4f inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ab84dd662cda89edb882fe5307b2136ea"></a>
typedef PointCloud::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudPtr</b></td></tr>
<tr class="separator:ab84dd662cda89edb882fe5307b2136ea inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ac8326513fad0680b6993e2f1a79a6af4"></a>
typedef PointCloud::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudConstPtr</b></td></tr>
<tr class="separator:ac8326513fad0680b6993e2f1a79a6af4 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ae51eae0c7b3e0b7178f4894dff90660a"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesPtr</b></td></tr>
<tr class="separator:ae51eae0c7b3e0b7178f4894dff90660a inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a51771056fb4ab8c448a11157acbe2ee0"></a>
typedef boost::shared_ptr&lt; <a class="el" href="structpcl_1_1_point_indices.html">PointIndices</a> const &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesConstPtr</b></td></tr>
<tr class="separator:a51771056fb4ab8c448a11157acbe2ee0 inherit pub_types_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:af7bf146541e1f56bbc890fb21581b228"><td class="memItemLeft" align="right" valign="top"><a id="af7bf146541e1f56bbc890fb21581b228"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#af7bf146541e1f56bbc890fb21581b228">NormalDistributionsTransform</a> ()</td></tr>
<tr class="memdesc:af7bf146541e1f56bbc890fb21581b228"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. Sets <a class="el" href="classpcl_1_1_normal_distributions_transform.html#a779d3b4c4f5181eb4f5ed6a660c66471">outlier_ratio_</a> to 0.35, <a class="el" href="classpcl_1_1_normal_distributions_transform.html#a15165f7e13bbfbc6a2e5e54bc8ed5c28">step_size_</a> to 0.05 and <a class="el" href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">resolution_</a> to 1.0 <br /></td></tr>
<tr class="separator:af7bf146541e1f56bbc890fb21581b228"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aacf2c41d361548584e398a44225896ce"><td class="memItemLeft" align="right" valign="top"><a id="aacf2c41d361548584e398a44225896ce"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#aacf2c41d361548584e398a44225896ce">~NormalDistributionsTransform</a> ()</td></tr>
<tr class="memdesc:aacf2c41d361548584e398a44225896ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty destructor <br /></td></tr>
<tr class="separator:aacf2c41d361548584e398a44225896ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abc9909b2197aaa297edcffe1a0a2b1ae"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#abc9909b2197aaa297edcffe1a0a2b1ae">setInputTarget</a> (const PointCloudTargetConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:abc9909b2197aaa297edcffe1a0a2b1ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to).  <a href="classpcl_1_1_normal_distributions_transform.html#abc9909b2197aaa297edcffe1a0a2b1ae">更多...</a><br /></td></tr>
<tr class="separator:abc9909b2197aaa297edcffe1a0a2b1ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b1282cd7399d47b02f210f47a47ccaa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a4b1282cd7399d47b02f210f47a47ccaa">setResolution</a> (float resolution)</td></tr>
<tr class="memdesc:a4b1282cd7399d47b02f210f47a47ccaa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set/change the voxel grid resolution.  <a href="classpcl_1_1_normal_distributions_transform.html#a4b1282cd7399d47b02f210f47a47ccaa">更多...</a><br /></td></tr>
<tr class="separator:a4b1282cd7399d47b02f210f47a47ccaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23d792fcdc2d052ed08571f5537e21a5"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a23d792fcdc2d052ed08571f5537e21a5">getResolution</a> () const</td></tr>
<tr class="memdesc:a23d792fcdc2d052ed08571f5537e21a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get voxel grid resolution.  <a href="classpcl_1_1_normal_distributions_transform.html#a23d792fcdc2d052ed08571f5537e21a5">更多...</a><br /></td></tr>
<tr class="separator:a23d792fcdc2d052ed08571f5537e21a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b009e0b8e2ae8e5c1c97e6a66494b45"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a5b009e0b8e2ae8e5c1c97e6a66494b45">getStepSize</a> () const</td></tr>
<tr class="memdesc:a5b009e0b8e2ae8e5c1c97e6a66494b45"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the newton line search maximum step length.  <a href="classpcl_1_1_normal_distributions_transform.html#a5b009e0b8e2ae8e5c1c97e6a66494b45">更多...</a><br /></td></tr>
<tr class="separator:a5b009e0b8e2ae8e5c1c97e6a66494b45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6e7b6e4d7129bb12d65477a56d99d99"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#af6e7b6e4d7129bb12d65477a56d99d99">setStepSize</a> (double step_size)</td></tr>
<tr class="memdesc:af6e7b6e4d7129bb12d65477a56d99d99"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set/change the newton line search maximum step length.  <a href="classpcl_1_1_normal_distributions_transform.html#af6e7b6e4d7129bb12d65477a56d99d99">更多...</a><br /></td></tr>
<tr class="separator:af6e7b6e4d7129bb12d65477a56d99d99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aedf43d53d08c848cab4ad95d8380bd1f"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#aedf43d53d08c848cab4ad95d8380bd1f">getOulierRatio</a> () const</td></tr>
<tr class="memdesc:aedf43d53d08c848cab4ad95d8380bd1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the point cloud outlier ratio.  <a href="classpcl_1_1_normal_distributions_transform.html#aedf43d53d08c848cab4ad95d8380bd1f">更多...</a><br /></td></tr>
<tr class="separator:aedf43d53d08c848cab4ad95d8380bd1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb58f7261434f0670d2063cb6396b03c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#acb58f7261434f0670d2063cb6396b03c">setOulierRatio</a> (double outlier_ratio)</td></tr>
<tr class="memdesc:acb58f7261434f0670d2063cb6396b03c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set/change the point cloud outlier ratio.  <a href="classpcl_1_1_normal_distributions_transform.html#acb58f7261434f0670d2063cb6396b03c">更多...</a><br /></td></tr>
<tr class="separator:acb58f7261434f0670d2063cb6396b03c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ce68689eb10fe61b9e6427ba143cbf1"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a5ce68689eb10fe61b9e6427ba143cbf1">getTransformationProbability</a> () const</td></tr>
<tr class="memdesc:a5ce68689eb10fe61b9e6427ba143cbf1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the registration alignment probability.  <a href="classpcl_1_1_normal_distributions_transform.html#a5ce68689eb10fe61b9e6427ba143cbf1">更多...</a><br /></td></tr>
<tr class="separator:a5ce68689eb10fe61b9e6427ba143cbf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62b635e6111fa3e0a756cebadcc6f78b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a62b635e6111fa3e0a756cebadcc6f78b">getFinalNumIteration</a> () const</td></tr>
<tr class="memdesc:a62b635e6111fa3e0a756cebadcc6f78b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the number of iterations required to calculate alignment.  <a href="classpcl_1_1_normal_distributions_transform.html#a62b635e6111fa3e0a756cebadcc6f78b">更多...</a><br /></td></tr>
<tr class="separator:a62b635e6111fa3e0a756cebadcc6f78b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_registration"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_registration')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_registration.html">pcl::Registration&lt; PointSource, PointTarget, Scalar &gt;</a></td></tr>
<tr class="memitem:a83a7a76a4c9d467c3a7bacdc4062f810 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a83a7a76a4c9d467c3a7bacdc4062f810"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a83a7a76a4c9d467c3a7bacdc4062f810">Registration</a> ()</td></tr>
<tr class="memdesc:a83a7a76a4c9d467c3a7bacdc4062f810 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:a83a7a76a4c9d467c3a7bacdc4062f810 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a612ce0633b614644e481a0affea2a352 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a612ce0633b614644e481a0affea2a352"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a612ce0633b614644e481a0affea2a352">~Registration</a> ()</td></tr>
<tr class="memdesc:a612ce0633b614644e481a0affea2a352 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">destructor. <br /></td></tr>
<tr class="separator:a612ce0633b614644e481a0affea2a352 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad16bd1099eb60c9ac26fdc6c56058029 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ad16bd1099eb60c9ac26fdc6c56058029">setTransformationEstimation</a> (const TransformationEstimationPtr &amp;te)</td></tr>
<tr class="memdesc:ad16bd1099eb60c9ac26fdc6c56058029 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the transformation estimation object. (e.g., SVD, point to plane etc.)  <a href="classpcl_1_1_registration.html#ad16bd1099eb60c9ac26fdc6c56058029">更多...</a><br /></td></tr>
<tr class="separator:ad16bd1099eb60c9ac26fdc6c56058029 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34f8e20116d171898515ed94997c3c7d inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a34f8e20116d171898515ed94997c3c7d">setCorrespondenceEstimation</a> (const CorrespondenceEstimationPtr &amp;ce)</td></tr>
<tr class="memdesc:a34f8e20116d171898515ed94997c3c7d inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the correspondence estimation object. (e.g., regular, reciprocal, normal shooting etc.)  <a href="classpcl_1_1_registration.html#a34f8e20116d171898515ed94997c3c7d">更多...</a><br /></td></tr>
<tr class="separator:a34f8e20116d171898515ed94997c3c7d inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a111fe9b14dc3c65ca420b640e42de9 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a6a111fe9b14dc3c65ca420b640e42de9">setInputCloud</a> (const PointCloudSourceConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a6a111fe9b14dc3c65ca420b640e42de9 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input source (e.g., the point cloud that we want to align to the target)  <a href="classpcl_1_1_registration.html#a6a111fe9b14dc3c65ca420b640e42de9">更多...</a><br /></td></tr>
<tr class="separator:a6a111fe9b14dc3c65ca420b640e42de9 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27a6eb286aef8d790a6570018e0dfa9b inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a27a6eb286aef8d790a6570018e0dfa9b"></a>
PointCloudSourceConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a27a6eb286aef8d790a6570018e0dfa9b">getInputCloud</a> ()</td></tr>
<tr class="memdesc:a27a6eb286aef8d790a6570018e0dfa9b inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset target. <br /></td></tr>
<tr class="separator:a27a6eb286aef8d790a6570018e0dfa9b inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a931144f549047b081c413e96a2fd70d6 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a931144f549047b081c413e96a2fd70d6">setInputSource</a> (const PointCloudSourceConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a931144f549047b081c413e96a2fd70d6 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input source (e.g., the point cloud that we want to align to the target)  <a href="classpcl_1_1_registration.html#a931144f549047b081c413e96a2fd70d6">更多...</a><br /></td></tr>
<tr class="separator:a931144f549047b081c413e96a2fd70d6 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac0d56239d2f0d7c567f9402a177d3a0e inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ac0d56239d2f0d7c567f9402a177d3a0e"></a>
PointCloudSourceConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ac0d56239d2f0d7c567f9402a177d3a0e">getInputSource</a> ()</td></tr>
<tr class="memdesc:ac0d56239d2f0d7c567f9402a177d3a0e inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset target. <br /></td></tr>
<tr class="separator:ac0d56239d2f0d7c567f9402a177d3a0e inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c4e69008295052913c76175797b99a9 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a4c4e69008295052913c76175797b99a9">setInputTarget</a> (const PointCloudTargetConstPtr &amp;cloud)</td></tr>
<tr class="memdesc:a4c4e69008295052913c76175797b99a9 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to)  <a href="classpcl_1_1_registration.html#a4c4e69008295052913c76175797b99a9">更多...</a><br /></td></tr>
<tr class="separator:a4c4e69008295052913c76175797b99a9 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97259be9f630f5f21ef60e3e62f8fa47 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a97259be9f630f5f21ef60e3e62f8fa47"></a>
PointCloudTargetConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a97259be9f630f5f21ef60e3e62f8fa47">getInputTarget</a> ()</td></tr>
<tr class="memdesc:a97259be9f630f5f21ef60e3e62f8fa47 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset target. <br /></td></tr>
<tr class="separator:a97259be9f630f5f21ef60e3e62f8fa47 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a409442a0f43b73e1227335307b1d9ccc inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a409442a0f43b73e1227335307b1d9ccc">setSearchMethodTarget</a> (const KdTreePtr &amp;tree, bool force_no_recompute=false)</td></tr>
<tr class="memdesc:a409442a0f43b73e1227335307b1d9ccc inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the search object used to find correspondences in the target cloud.  <a href="classpcl_1_1_registration.html#a409442a0f43b73e1227335307b1d9ccc">更多...</a><br /></td></tr>
<tr class="separator:a409442a0f43b73e1227335307b1d9ccc inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7600327adbe8c11394c52f13364133cd inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a7600327adbe8c11394c52f13364133cd"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a7600327adbe8c11394c52f13364133cd">getSearchMethodTarget</a> () const</td></tr>
<tr class="memdesc:a7600327adbe8c11394c52f13364133cd inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the search method used to find correspondences in the target cloud. <br /></td></tr>
<tr class="separator:a7600327adbe8c11394c52f13364133cd inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3bfafcf5966b90f513f52ff0a7a42f37 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a3bfafcf5966b90f513f52ff0a7a42f37">setSearchMethodSource</a> (const KdTreeReciprocalPtr &amp;tree, bool force_no_recompute=false)</td></tr>
<tr class="memdesc:a3bfafcf5966b90f513f52ff0a7a42f37 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the search object used to find correspondences in the source cloud (usually used by reciprocal correspondence finding).  <a href="classpcl_1_1_registration.html#a3bfafcf5966b90f513f52ff0a7a42f37">更多...</a><br /></td></tr>
<tr class="separator:a3bfafcf5966b90f513f52ff0a7a42f37 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:add717357d14e16c3d71eefe8cd658343 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="add717357d14e16c3d71eefe8cd658343"></a>
KdTreeReciprocalPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#add717357d14e16c3d71eefe8cd658343">getSearchMethodSource</a> () const</td></tr>
<tr class="memdesc:add717357d14e16c3d71eefe8cd658343 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the search method used to find correspondences in the source cloud. <br /></td></tr>
<tr class="separator:add717357d14e16c3d71eefe8cd658343 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e68bd39ac943131dcbf1431f9afe3f3 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a1e68bd39ac943131dcbf1431f9afe3f3"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a1e68bd39ac943131dcbf1431f9afe3f3">getFinalTransformation</a> ()</td></tr>
<tr class="memdesc:a1e68bd39ac943131dcbf1431f9afe3f3 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the final transformation matrix estimated by the registration method. <br /></td></tr>
<tr class="separator:a1e68bd39ac943131dcbf1431f9afe3f3 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86b11948c03bee5474b2224bf988f701 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a86b11948c03bee5474b2224bf988f701"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a86b11948c03bee5474b2224bf988f701">getLastIncrementalTransformation</a> ()</td></tr>
<tr class="memdesc:a86b11948c03bee5474b2224bf988f701 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the last incremental transformation matrix estimated by the registration method. <br /></td></tr>
<tr class="separator:a86b11948c03bee5474b2224bf988f701 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3844d186f7a99d15464368e0f25635ed inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a3844d186f7a99d15464368e0f25635ed">setMaximumIterations</a> (int nr_iterations)</td></tr>
<tr class="memdesc:a3844d186f7a99d15464368e0f25635ed inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum number of iterations the internal optimization should run for.  <a href="classpcl_1_1_registration.html#a3844d186f7a99d15464368e0f25635ed">更多...</a><br /></td></tr>
<tr class="separator:a3844d186f7a99d15464368e0f25635ed inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf1c20667e8bc292a687c9664fd30735 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="adf1c20667e8bc292a687c9664fd30735"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#adf1c20667e8bc292a687c9664fd30735">getMaximumIterations</a> ()</td></tr>
<tr class="memdesc:adf1c20667e8bc292a687c9664fd30735 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum number of iterations the internal optimization should run for, as set by the user. <br /></td></tr>
<tr class="separator:adf1c20667e8bc292a687c9664fd30735 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1fbe7e76761563c44cb2460376ed5e53 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a1fbe7e76761563c44cb2460376ed5e53">setRANSACIterations</a> (int ransac_iterations)</td></tr>
<tr class="memdesc:a1fbe7e76761563c44cb2460376ed5e53 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the number of iterations RANSAC should run for.  <a href="classpcl_1_1_registration.html#a1fbe7e76761563c44cb2460376ed5e53">更多...</a><br /></td></tr>
<tr class="separator:a1fbe7e76761563c44cb2460376ed5e53 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:affcce068a7d132be1eb299d509390ca1 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="affcce068a7d132be1eb299d509390ca1"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#affcce068a7d132be1eb299d509390ca1">getRANSACIterations</a> ()</td></tr>
<tr class="memdesc:affcce068a7d132be1eb299d509390ca1 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the number of iterations RANSAC should run for, as set by the user. <br /></td></tr>
<tr class="separator:affcce068a7d132be1eb299d509390ca1 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64db6d25e2707a174dbad28f2484bffe inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a64db6d25e2707a174dbad28f2484bffe">setRANSACOutlierRejectionThreshold</a> (double inlier_threshold)</td></tr>
<tr class="memdesc:a64db6d25e2707a174dbad28f2484bffe inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the inlier distance threshold for the internal RANSAC outlier rejection loop.  <a href="classpcl_1_1_registration.html#a64db6d25e2707a174dbad28f2484bffe">更多...</a><br /></td></tr>
<tr class="separator:a64db6d25e2707a174dbad28f2484bffe inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b4ae8d2e7b280de376b1e8a3956157e inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a6b4ae8d2e7b280de376b1e8a3956157e"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a6b4ae8d2e7b280de376b1e8a3956157e">getRANSACOutlierRejectionThreshold</a> ()</td></tr>
<tr class="memdesc:a6b4ae8d2e7b280de376b1e8a3956157e inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the inlier distance threshold for the internal outlier rejection loop as set by the user. <br /></td></tr>
<tr class="separator:a6b4ae8d2e7b280de376b1e8a3956157e inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65596dcc3cb5d2647857226fb3d999a5 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a65596dcc3cb5d2647857226fb3d999a5">setMaxCorrespondenceDistance</a> (double distance_threshold)</td></tr>
<tr class="memdesc:a65596dcc3cb5d2647857226fb3d999a5 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum distance threshold between two correspondent points in source &lt;-&gt; target. If the distance is larger than this threshold, the points will be ignored in the alignment process.  <a href="classpcl_1_1_registration.html#a65596dcc3cb5d2647857226fb3d999a5">更多...</a><br /></td></tr>
<tr class="separator:a65596dcc3cb5d2647857226fb3d999a5 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71fec358f22d434de9a654b6ffd5949f inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a71fec358f22d434de9a654b6ffd5949f"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a71fec358f22d434de9a654b6ffd5949f">getMaxCorrespondenceDistance</a> ()</td></tr>
<tr class="memdesc:a71fec358f22d434de9a654b6ffd5949f inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum distance threshold between two correspondent points in source &lt;-&gt; target. If the distance is larger than this threshold, the points will be ignored in the alignment process. <br /></td></tr>
<tr class="separator:a71fec358f22d434de9a654b6ffd5949f inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec74ab878cca8d62fd1be9942685a8c1 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#aec74ab878cca8d62fd1be9942685a8c1">setTransformationEpsilon</a> (double epsilon)</td></tr>
<tr class="memdesc:aec74ab878cca8d62fd1be9942685a8c1 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the transformation epsilon (maximum allowable difference between two consecutive transformations) in order for an optimization to be considered as having converged to the final solution.  <a href="classpcl_1_1_registration.html#aec74ab878cca8d62fd1be9942685a8c1">更多...</a><br /></td></tr>
<tr class="separator:aec74ab878cca8d62fd1be9942685a8c1 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19024853d8480a0e4bc3193f6f75f7c8 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a19024853d8480a0e4bc3193f6f75f7c8"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a19024853d8480a0e4bc3193f6f75f7c8">getTransformationEpsilon</a> ()</td></tr>
<tr class="memdesc:a19024853d8480a0e4bc3193f6f75f7c8 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the transformation epsilon (maximum allowable difference between two consecutive transformations) as set by the user. <br /></td></tr>
<tr class="separator:a19024853d8480a0e4bc3193f6f75f7c8 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb0bb4577dbe144bd467d4a9632b84d8 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#aeb0bb4577dbe144bd467d4a9632b84d8">setEuclideanFitnessEpsilon</a> (double epsilon)</td></tr>
<tr class="memdesc:aeb0bb4577dbe144bd467d4a9632b84d8 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum allowed Euclidean error between two consecutive steps in the ICP loop, before the algorithm is considered to have converged. The error is estimated as the sum of the differences between correspondences in an Euclidean sense, divided by the number of correspondences.  <a href="classpcl_1_1_registration.html#aeb0bb4577dbe144bd467d4a9632b84d8">更多...</a><br /></td></tr>
<tr class="separator:aeb0bb4577dbe144bd467d4a9632b84d8 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a71b9fa3e4d1285d16361efe4d0634bde inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a71b9fa3e4d1285d16361efe4d0634bde"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a71b9fa3e4d1285d16361efe4d0634bde">getEuclideanFitnessEpsilon</a> ()</td></tr>
<tr class="memdesc:a71b9fa3e4d1285d16361efe4d0634bde inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum allowed distance error before the algorithm will be considered to have converged, as set by the user. See <a class="el" href="classpcl_1_1_registration.html#aeb0bb4577dbe144bd467d4a9632b84d8">setEuclideanFitnessEpsilon</a> <br /></td></tr>
<tr class="separator:a71b9fa3e4d1285d16361efe4d0634bde inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5da970b4fbd4d1dfbaa4ab76d3d7d22e inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a5da970b4fbd4d1dfbaa4ab76d3d7d22e">setPointRepresentation</a> (const PointRepresentationConstPtr &amp;point_representation)</td></tr>
<tr class="memdesc:a5da970b4fbd4d1dfbaa4ab76d3d7d22e inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a boost shared pointer to the <a class="el" href="classpcl_1_1_point_representation.html" title="PointRepresentation provides a set of methods for converting a point structs/object into an n-dimensi...">PointRepresentation</a> to be used when comparing points  <a href="classpcl_1_1_registration.html#a5da970b4fbd4d1dfbaa4ab76d3d7d22e">更多...</a><br /></td></tr>
<tr class="separator:a5da970b4fbd4d1dfbaa4ab76d3d7d22e inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac13dcb392c660cf311a689041ec63a5c inherit pub_methods_classpcl_1_1_registration"><td class="memTemplParams" colspan="2">template&lt;typename FunctionSignature &gt; </td></tr>
<tr class="memitem:ac13dcb392c660cf311a689041ec63a5c inherit pub_methods_classpcl_1_1_registration"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ac13dcb392c660cf311a689041ec63a5c">registerVisualizationCallback</a> (boost::function&lt; FunctionSignature &gt; &amp;visualizerCallback)</td></tr>
<tr class="memdesc:ac13dcb392c660cf311a689041ec63a5c inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register the user callback function which will be called from registration thread in order to update point cloud obtained after each iteration  <a href="classpcl_1_1_registration.html#ac13dcb392c660cf311a689041ec63a5c">更多...</a><br /></td></tr>
<tr class="separator:ac13dcb392c660cf311a689041ec63a5c inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab26742c383b6f5e86fb96a236fb08728 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ab26742c383b6f5e86fb96a236fb08728">getFitnessScore</a> (double max_range=std::numeric_limits&lt; double &gt;::max())</td></tr>
<tr class="memdesc:ab26742c383b6f5e86fb96a236fb08728 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtain the Euclidean fitness score (e.g., sum of squared distances from the source to the target)  <a href="classpcl_1_1_registration.html#ab26742c383b6f5e86fb96a236fb08728">更多...</a><br /></td></tr>
<tr class="separator:ab26742c383b6f5e86fb96a236fb08728 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b9c05b613e698af21f3cb048e611adc inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a4b9c05b613e698af21f3cb048e611adc">getFitnessScore</a> (const std::vector&lt; float &gt; &amp;distances_a, const std::vector&lt; float &gt; &amp;distances_b)</td></tr>
<tr class="memdesc:a4b9c05b613e698af21f3cb048e611adc inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtain the Euclidean fitness score (e.g., sum of squared distances from the source to the target) from two sets of correspondence distances (distances between source and target points)  <a href="classpcl_1_1_registration.html#a4b9c05b613e698af21f3cb048e611adc">更多...</a><br /></td></tr>
<tr class="separator:a4b9c05b613e698af21f3cb048e611adc inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b91930ed75aaafec420ed223d1a111b inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a7b91930ed75aaafec420ed223d1a111b"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a7b91930ed75aaafec420ed223d1a111b">hasConverged</a> ()</td></tr>
<tr class="memdesc:a7b91930ed75aaafec420ed223d1a111b inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the state of convergence after the last align run <br /></td></tr>
<tr class="separator:a7b91930ed75aaafec420ed223d1a111b inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96212303ca16b6d60020824086887c4f inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a96212303ca16b6d60020824086887c4f">align</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;output)</td></tr>
<tr class="memdesc:a96212303ca16b6d60020824086887c4f inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Call the registration algorithm which estimates the transformation and returns the transformed source (input) as <em>output</em>.  <a href="classpcl_1_1_registration.html#a96212303ca16b6d60020824086887c4f">更多...</a><br /></td></tr>
<tr class="separator:a96212303ca16b6d60020824086887c4f inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab1d64f86162b2df716ead8d978579c11 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ab1d64f86162b2df716ead8d978579c11">align</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;output, const Matrix4 &amp;guess)</td></tr>
<tr class="memdesc:ab1d64f86162b2df716ead8d978579c11 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Call the registration algorithm which estimates the transformation and returns the transformed source (input) as <em>output</em>.  <a href="classpcl_1_1_registration.html#ab1d64f86162b2df716ead8d978579c11">更多...</a><br /></td></tr>
<tr class="separator:ab1d64f86162b2df716ead8d978579c11 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26eae6a42450893ca1c2ed81560159f2 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a26eae6a42450893ca1c2ed81560159f2"></a>
const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a26eae6a42450893ca1c2ed81560159f2">getClassName</a> () const</td></tr>
<tr class="memdesc:a26eae6a42450893ca1c2ed81560159f2 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Abstract class get name method. <br /></td></tr>
<tr class="separator:a26eae6a42450893ca1c2ed81560159f2 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b42c13696bef68c50d5c3135bc573cf inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a0b42c13696bef68c50d5c3135bc573cf"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a0b42c13696bef68c50d5c3135bc573cf">initCompute</a> ()</td></tr>
<tr class="memdesc:a0b42c13696bef68c50d5c3135bc573cf inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal computation initalization. <br /></td></tr>
<tr class="separator:a0b42c13696bef68c50d5c3135bc573cf inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae210269f0404556b8dd7f4306084a91d inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ae210269f0404556b8dd7f4306084a91d"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ae210269f0404556b8dd7f4306084a91d">initComputeReciprocal</a> ()</td></tr>
<tr class="memdesc:ae210269f0404556b8dd7f4306084a91d inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal computation when reciprocal lookup is needed <br /></td></tr>
<tr class="separator:ae210269f0404556b8dd7f4306084a91d inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a663e64d6d5103eb937addd3e33104cf6 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a663e64d6d5103eb937addd3e33104cf6">addCorrespondenceRejector</a> (const CorrespondenceRejectorPtr &amp;rejector)</td></tr>
<tr class="memdesc:a663e64d6d5103eb937addd3e33104cf6 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a new correspondence rejector to the list  <a href="classpcl_1_1_registration.html#a663e64d6d5103eb937addd3e33104cf6">更多...</a><br /></td></tr>
<tr class="separator:a663e64d6d5103eb937addd3e33104cf6 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac0c221d8f1151096721db3817610c9d9 inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ac0c221d8f1151096721db3817610c9d9"></a>
std::vector&lt; CorrespondenceRejectorPtr &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ac0c221d8f1151096721db3817610c9d9">getCorrespondenceRejectors</a> ()</td></tr>
<tr class="memdesc:ac0c221d8f1151096721db3817610c9d9 inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the list of correspondence rejectors. <br /></td></tr>
<tr class="separator:ac0c221d8f1151096721db3817610c9d9 inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33d49f38bcb804bb893a14e3cd4ed31e inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a33d49f38bcb804bb893a14e3cd4ed31e">removeCorrespondenceRejector</a> (unsigned int i)</td></tr>
<tr class="memdesc:a33d49f38bcb804bb893a14e3cd4ed31e inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Remove the i-th correspondence rejector in the list  <a href="classpcl_1_1_registration.html#a33d49f38bcb804bb893a14e3cd4ed31e">更多...</a><br /></td></tr>
<tr class="separator:a33d49f38bcb804bb893a14e3cd4ed31e inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a169aeb5141fc6e1cec83582ae284aeaa inherit pub_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a169aeb5141fc6e1cec83582ae284aeaa"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a169aeb5141fc6e1cec83582ae284aeaa">clearCorrespondenceRejectors</a> ()</td></tr>
<tr class="memdesc:a169aeb5141fc6e1cec83582ae284aeaa inherit pub_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear the list of correspondence rejectors. <br /></td></tr>
<tr class="separator:a169aeb5141fc6e1cec83582ae284aeaa inherit pub_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Public 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointSource &gt;</a></td></tr>
<tr class="memitem:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="af4fbc5eb005057f8a0fc6d60bde595df"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af4fbc5eb005057f8a0fc6d60bde595df">PCLBase</a> ()</td></tr>
<tr class="memdesc:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Empty constructor. <br /></td></tr>
<tr class="separator:af4fbc5eb005057f8a0fc6d60bde595df inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a7a6dd7a91275d7737cf1b18005b47244"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a7a6dd7a91275d7737cf1b18005b47244">PCLBase</a> (const <a class="el" href="classpcl_1_1_p_c_l_base.html">PCLBase</a> &amp;base)</td></tr>
<tr class="memdesc:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor. <br /></td></tr>
<tr class="separator:a7a6dd7a91275d7737cf1b18005b47244 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ad5d6846e98e59c37dcc3dc9958d53966"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ad5d6846e98e59c37dcc3dc9958d53966">~PCLBase</a> ()</td></tr>
<tr class="memdesc:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:ad5d6846e98e59c37dcc3dc9958d53966 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a8cd745c4f7a792212f4fc3720b9d46ea"></a>
PointCloudConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a8cd745c4f7a792212f4fc3720b9d46ea">getInputCloud</a> () const</td></tr>
<tr class="memdesc:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the input point cloud dataset. <br /></td></tr>
<tr class="separator:a8cd745c4f7a792212f4fc3720b9d46ea inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">setIndices</a> (const IndicesPtr &amp;indices)</td></tr>
<tr class="memdesc:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#ab219359de6eb34c9d51e2e976dd1a0d1">更多...</a><br /></td></tr>
<tr class="separator:ab219359de6eb34c9d51e2e976dd1a0d1 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">setIndices</a> (const IndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#a436c68c74b31e4dd00000adfbb11ca7c">更多...</a><br /></td></tr>
<tr class="separator:a436c68c74b31e4dd00000adfbb11ca7c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">setIndices</a> (const PointIndicesConstPtr &amp;indices)</td></tr>
<tr class="memdesc:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provide a pointer to the vector of indices that represents the input data.  <a href="classpcl_1_1_p_c_l_base.html#af9cc90d8364ce968566f75800d3773ca">更多...</a><br /></td></tr>
<tr class="separator:af9cc90d8364ce968566f75800d3773ca inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">setIndices</a> (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols)</td></tr>
<tr class="memdesc:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the indices for the points laying within an interest region of the point cloud.  <a href="classpcl_1_1_p_c_l_base.html#a930c7a6375fdf65ff8cfdb4eb4a6d996">更多...</a><br /></td></tr>
<tr class="separator:a930c7a6375fdf65ff8cfdb4eb4a6d996 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a058753dd4de73d3d0062fe2e452fba3c"></a>
IndicesPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a058753dd4de73d3d0062fe2e452fba3c">getIndices</a> ()</td></tr>
<tr class="memdesc:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:a058753dd4de73d3d0062fe2e452fba3c inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="acae187b37230758959572ceb1e6e2045"></a>
IndicesConstPtr const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acae187b37230758959572ceb1e6e2045">getIndices</a> () const</td></tr>
<tr class="memdesc:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a pointer to the vector of indices used. <br /></td></tr>
<tr class="separator:acae187b37230758959572ceb1e6e2045 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">const PointSource &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">operator[]</a> (size_t pos) const</td></tr>
<tr class="memdesc:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Override PointCloud operator[] to shorten code  <a href="classpcl_1_1_p_c_l_base.html#af7335fedb0af0930b9d1dedcb54ba201">更多...</a><br /></td></tr>
<tr class="separator:af7335fedb0af0930b9d1dedcb54ba201 inherit pub_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
静态 Public 成员函数</h2></td></tr>
<tr class="memitem:a60ca3541f15f9ffb2b0b0bc43b9d3d69"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a60ca3541f15f9ffb2b0b0bc43b9d3d69">convertTransform</a> (const Eigen::Matrix&lt; double, 6, 1 &gt; &amp;x, Eigen::Affine3f &amp;trans)</td></tr>
<tr class="memdesc:a60ca3541f15f9ffb2b0b0bc43b9d3d69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert 6 element transformation vector to affine transformation.  <a href="classpcl_1_1_normal_distributions_transform.html#a60ca3541f15f9ffb2b0b0bc43b9d3d69">更多...</a><br /></td></tr>
<tr class="separator:a60ca3541f15f9ffb2b0b0bc43b9d3d69"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6cd487fcf59a975ca9b898a56a429a5f"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a6cd487fcf59a975ca9b898a56a429a5f">convertTransform</a> (const Eigen::Matrix&lt; double, 6, 1 &gt; &amp;x, Eigen::Matrix4f &amp;trans)</td></tr>
<tr class="memdesc:a6cd487fcf59a975ca9b898a56a429a5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convert 6 element transformation vector to transformation matrix.  <a href="classpcl_1_1_normal_distributions_transform.html#a6cd487fcf59a975ca9b898a56a429a5f">更多...</a><br /></td></tr>
<tr class="separator:a6cd487fcf59a975ca9b898a56a429a5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
Protected 类型</h2></td></tr>
<tr class="memitem:a2e2d2207fc06d2b13cea6ca0095ec832"><td class="memItemLeft" align="right" valign="top"><a id="a2e2d2207fc06d2b13cea6ca0095ec832"></a>
typedef <a class="el" href="classpcl_1_1_registration.html">Registration</a>&lt; PointSource, PointTarget &gt;::<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a>&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSource</b></td></tr>
<tr class="separator:a2e2d2207fc06d2b13cea6ca0095ec832"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc8a7c0612ab8a8f180d9206a140ef9c"><td class="memItemLeft" align="right" valign="top"><a id="adc8a7c0612ab8a8f180d9206a140ef9c"></a>
typedef PointCloudSource::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSourcePtr</b></td></tr>
<tr class="separator:adc8a7c0612ab8a8f180d9206a140ef9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0e2f041bdfe5a16e3339c92f89eb0dd1"><td class="memItemLeft" align="right" valign="top"><a id="a0e2f041bdfe5a16e3339c92f89eb0dd1"></a>
typedef PointCloudSource::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudSourceConstPtr</b></td></tr>
<tr class="separator:a0e2f041bdfe5a16e3339c92f89eb0dd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8976723d9512dc45f8563a8a89dedd79"><td class="memItemLeft" align="right" valign="top"><a id="a8976723d9512dc45f8563a8a89dedd79"></a>
typedef <a class="el" href="classpcl_1_1_registration.html">Registration</a>&lt; PointSource, PointTarget &gt;::<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudTarget</a>&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTarget</b></td></tr>
<tr class="separator:a8976723d9512dc45f8563a8a89dedd79"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d25d22748a3b6078332fafe34386603"><td class="memItemLeft" align="right" valign="top"><a id="a7d25d22748a3b6078332fafe34386603"></a>
typedef PointCloudTarget::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTargetPtr</b></td></tr>
<tr class="separator:a7d25d22748a3b6078332fafe34386603"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8962763655f7257d56ef2f12e821d77d"><td class="memItemLeft" align="right" valign="top"><a id="a8962763655f7257d56ef2f12e821d77d"></a>
typedef PointCloudTarget::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudTargetConstPtr</b></td></tr>
<tr class="separator:a8962763655f7257d56ef2f12e821d77d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a450ffdcd8ec97e95117070d423264da4"><td class="memItemLeft" align="right" valign="top"><a id="a450ffdcd8ec97e95117070d423264da4"></a>
typedef PointIndices::Ptr&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesPtr</b></td></tr>
<tr class="separator:a450ffdcd8ec97e95117070d423264da4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42cc623b9722da6bd2ad88208e75bb9d"><td class="memItemLeft" align="right" valign="top"><a id="a42cc623b9722da6bd2ad88208e75bb9d"></a>
typedef PointIndices::ConstPtr&#160;</td><td class="memItemRight" valign="bottom"><b>PointIndicesConstPtr</b></td></tr>
<tr class="separator:a42cc623b9722da6bd2ad88208e75bb9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d245ca8e5df83bb576ea5bf61e513be"><td class="memItemLeft" align="right" valign="top"><a id="a0d245ca8e5df83bb576ea5bf61e513be"></a>
typedef <a class="el" href="classpcl_1_1_voxel_grid_covariance.html">VoxelGridCovariance</a>&lt; PointTarget &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a0d245ca8e5df83bb576ea5bf61e513be">TargetGrid</a></td></tr>
<tr class="memdesc:a0d245ca8e5df83bb576ea5bf61e513be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typename of searchable voxel grid containing mean and covariance. <br /></td></tr>
<tr class="separator:a0d245ca8e5df83bb576ea5bf61e513be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd0bc0223e03d2453ab9e910877c6239"><td class="memItemLeft" align="right" valign="top"><a id="acd0bc0223e03d2453ab9e910877c6239"></a>
typedef <a class="el" href="classpcl_1_1_normal_distributions_transform.html#a0d245ca8e5df83bb576ea5bf61e513be">TargetGrid</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#acd0bc0223e03d2453ab9e910877c6239">TargetGridPtr</a></td></tr>
<tr class="memdesc:acd0bc0223e03d2453ab9e910877c6239"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typename of pointer to searchable voxel grid. <br /></td></tr>
<tr class="separator:acd0bc0223e03d2453ab9e910877c6239"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ce910fa207bd060f856268504dcd5da"><td class="memItemLeft" align="right" valign="top"><a id="a4ce910fa207bd060f856268504dcd5da"></a>
typedef const <a class="el" href="classpcl_1_1_normal_distributions_transform.html#a0d245ca8e5df83bb576ea5bf61e513be">TargetGrid</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a4ce910fa207bd060f856268504dcd5da">TargetGridConstPtr</a></td></tr>
<tr class="memdesc:a4ce910fa207bd060f856268504dcd5da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typename of const pointer to searchable voxel grid. <br /></td></tr>
<tr class="separator:a4ce910fa207bd060f856268504dcd5da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae241178695742c3cc138682b32f5f4b0"><td class="memItemLeft" align="right" valign="top"><a id="ae241178695742c3cc138682b32f5f4b0"></a>
typedef <a class="el" href="classpcl_1_1_voxel_grid_covariance.html#a7cd5f4e0a702dfd45de8654f1a008c91">TargetGrid::LeafConstPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#ae241178695742c3cc138682b32f5f4b0">TargetGridLeafConstPtr</a></td></tr>
<tr class="memdesc:ae241178695742c3cc138682b32f5f4b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Typename of const pointer to searchable voxel grid leaf. <br /></td></tr>
<tr class="separator:ae241178695742c3cc138682b32f5f4b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected 成员函数</h2></td></tr>
<tr class="memitem:a60ae727dd5185e7fc804b4d8de973a85"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a60ae727dd5185e7fc804b4d8de973a85">computeTransformation</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;output)</td></tr>
<tr class="memdesc:a60ae727dd5185e7fc804b4d8de973a85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimate the transformation and returns the transformed source (input) as output.  <a href="classpcl_1_1_normal_distributions_transform.html#a60ae727dd5185e7fc804b4d8de973a85">更多...</a><br /></td></tr>
<tr class="separator:a60ae727dd5185e7fc804b4d8de973a85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4abd14dda61865b6063868c3f3fc8845"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a4abd14dda61865b6063868c3f3fc8845">computeTransformation</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;output, const Eigen::Matrix4f &amp;guess)</td></tr>
<tr class="memdesc:a4abd14dda61865b6063868c3f3fc8845"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimate the transformation and returns the transformed source (input) as output.  <a href="classpcl_1_1_normal_distributions_transform.html#a4abd14dda61865b6063868c3f3fc8845">更多...</a><br /></td></tr>
<tr class="separator:a4abd14dda61865b6063868c3f3fc8845"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd92aa13bd087dafada2010c413905b7"><td class="memItemLeft" align="right" valign="top"><a id="abd92aa13bd087dafada2010c413905b7"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#abd92aa13bd087dafada2010c413905b7">init</a> ()</td></tr>
<tr class="memdesc:abd92aa13bd087dafada2010c413905b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initiate covariance voxel structure. <br /></td></tr>
<tr class="separator:abd92aa13bd087dafada2010c413905b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2eb79c026d9ec3bde70cf4b53377aa53"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a2eb79c026d9ec3bde70cf4b53377aa53">computeDerivatives</a> (Eigen::Matrix&lt; double, 6, 1 &gt; &amp;score_gradient, Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;trans_cloud, Eigen::Matrix&lt; double, 6, 1 &gt; &amp;p, bool compute_hessian=true)</td></tr>
<tr class="memdesc:a2eb79c026d9ec3bde70cf4b53377aa53"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute derivatives of probability function w.r.t. the transformation vector.  <a href="classpcl_1_1_normal_distributions_transform.html#a2eb79c026d9ec3bde70cf4b53377aa53">更多...</a><br /></td></tr>
<tr class="separator:a2eb79c026d9ec3bde70cf4b53377aa53"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad006c7315b1f52de25efc41183c5ed60"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#ad006c7315b1f52de25efc41183c5ed60">updateDerivatives</a> (Eigen::Matrix&lt; double, 6, 1 &gt; &amp;score_gradient, Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, Eigen::Vector3d &amp;x_trans, Eigen::Matrix3d &amp;c_inv, bool compute_hessian=true)</td></tr>
<tr class="memdesc:ad006c7315b1f52de25efc41183c5ed60"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute individual point contirbutions to derivatives of probability function w.r.t. the transformation vector.  <a href="classpcl_1_1_normal_distributions_transform.html#ad006c7315b1f52de25efc41183c5ed60">更多...</a><br /></td></tr>
<tr class="separator:ad006c7315b1f52de25efc41183c5ed60"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af99468f56f6bb95bef79193ab0b16205"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#af99468f56f6bb95bef79193ab0b16205">computeAngleDerivatives</a> (Eigen::Matrix&lt; double, 6, 1 &gt; &amp;p, bool compute_hessian=true)</td></tr>
<tr class="memdesc:af99468f56f6bb95bef79193ab0b16205"><td class="mdescLeft">&#160;</td><td class="mdescRight">Precompute anglular components of derivatives.  <a href="classpcl_1_1_normal_distributions_transform.html#af99468f56f6bb95bef79193ab0b16205">更多...</a><br /></td></tr>
<tr class="separator:af99468f56f6bb95bef79193ab0b16205"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acdba743aa6ea3747e2fddeed10cc5ec1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#acdba743aa6ea3747e2fddeed10cc5ec1">computePointDerivatives</a> (Eigen::Vector3d &amp;x, bool compute_hessian=true)</td></tr>
<tr class="memdesc:acdba743aa6ea3747e2fddeed10cc5ec1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute point derivatives.  <a href="classpcl_1_1_normal_distributions_transform.html#acdba743aa6ea3747e2fddeed10cc5ec1">更多...</a><br /></td></tr>
<tr class="separator:acdba743aa6ea3747e2fddeed10cc5ec1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12a31cfee6372534d795c1f65fbfbd2d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a12a31cfee6372534d795c1f65fbfbd2d">computeHessian</a> (Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;trans_cloud, Eigen::Matrix&lt; double, 6, 1 &gt; &amp;p)</td></tr>
<tr class="memdesc:a12a31cfee6372534d795c1f65fbfbd2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute hessian of probability function w.r.t. the transformation vector.  <a href="classpcl_1_1_normal_distributions_transform.html#a12a31cfee6372534d795c1f65fbfbd2d">更多...</a><br /></td></tr>
<tr class="separator:a12a31cfee6372534d795c1f65fbfbd2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9c6bd836040e430eea730cd6d16694f9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a9c6bd836040e430eea730cd6d16694f9">updateHessian</a> (Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, Eigen::Vector3d &amp;x_trans, Eigen::Matrix3d &amp;c_inv)</td></tr>
<tr class="memdesc:a9c6bd836040e430eea730cd6d16694f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute individual point contirbutions to hessian of probability function w.r.t. the transformation vector.  <a href="classpcl_1_1_normal_distributions_transform.html#a9c6bd836040e430eea730cd6d16694f9">更多...</a><br /></td></tr>
<tr class="separator:a9c6bd836040e430eea730cd6d16694f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a92103be9ce6dc6838d13353358daa852"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a92103be9ce6dc6838d13353358daa852">computeStepLengthMT</a> (const Eigen::Matrix&lt; double, 6, 1 &gt; &amp;x, Eigen::Matrix&lt; double, 6, 1 &gt; &amp;step_dir, double step_init, double step_max, double step_min, double &amp;score, Eigen::Matrix&lt; double, 6, 1 &gt; &amp;score_gradient, Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;trans_cloud)</td></tr>
<tr class="memdesc:a92103be9ce6dc6838d13353358daa852"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute line search step length and update transform and probability derivatives using More-Thuente method.  <a href="classpcl_1_1_normal_distributions_transform.html#a92103be9ce6dc6838d13353358daa852">更多...</a><br /></td></tr>
<tr class="separator:a92103be9ce6dc6838d13353358daa852"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acef200272607a40dc9890481f11c2480"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#acef200272607a40dc9890481f11c2480">updateIntervalMT</a> (double &amp;a_l, double &amp;f_l, double &amp;g_l, double &amp;a_u, double &amp;f_u, double &amp;g_u, double a_t, double f_t, double g_t)</td></tr>
<tr class="memdesc:acef200272607a40dc9890481f11c2480"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update interval of possible step lengths for More-Thuente method, <img class="formulaInl" alt="$ I $" src="form_37.png"/> in More-Thuente (1994)  <a href="classpcl_1_1_normal_distributions_transform.html#acef200272607a40dc9890481f11c2480">更多...</a><br /></td></tr>
<tr class="separator:acef200272607a40dc9890481f11c2480"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ae4590ac0242cb320ea6f29e1b93ba6"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a7ae4590ac0242cb320ea6f29e1b93ba6">trialValueSelectionMT</a> (double a_l, double f_l, double g_l, double a_u, double f_u, double g_u, double a_t, double f_t, double g_t)</td></tr>
<tr class="memdesc:a7ae4590ac0242cb320ea6f29e1b93ba6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Select new trial value for More-Thuente method.  <a href="classpcl_1_1_normal_distributions_transform.html#a7ae4590ac0242cb320ea6f29e1b93ba6">更多...</a><br /></td></tr>
<tr class="separator:a7ae4590ac0242cb320ea6f29e1b93ba6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8fc05efdb729b163d4e3f175186b5e5a"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a8fc05efdb729b163d4e3f175186b5e5a">auxilaryFunction_PsiMT</a> (double a, double f_a, double f_0, double g_0, double mu=1.e-4)</td></tr>
<tr class="memdesc:a8fc05efdb729b163d4e3f175186b5e5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Auxilary function used to determin endpoints of More-Thuente interval.  <a href="classpcl_1_1_normal_distributions_transform.html#a8fc05efdb729b163d4e3f175186b5e5a">更多...</a><br /></td></tr>
<tr class="separator:a8fc05efdb729b163d4e3f175186b5e5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93428f5aa08e84203bde53cd554c6794"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a93428f5aa08e84203bde53cd554c6794">auxilaryFunction_dPsiMT</a> (double g_a, double g_0, double mu=1.e-4)</td></tr>
<tr class="memdesc:a93428f5aa08e84203bde53cd554c6794"><td class="mdescLeft">&#160;</td><td class="mdescRight">Auxilary function derivative used to determin endpoints of More-Thuente interval.  <a href="classpcl_1_1_normal_distributions_transform.html#a93428f5aa08e84203bde53cd554c6794">更多...</a><br /></td></tr>
<tr class="separator:a93428f5aa08e84203bde53cd554c6794"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_registration"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_registration')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_registration.html">pcl::Registration&lt; PointSource, PointTarget, Scalar &gt;</a></td></tr>
<tr class="memitem:abbeeee9510e44239d47b3c8079ee7c20 inherit pro_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#abbeeee9510e44239d47b3c8079ee7c20">searchForNeighbors</a> (const <a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;cloud, int index, std::vector&lt; int &gt; &amp;indices, std::vector&lt; float &gt; &amp;distances)</td></tr>
<tr class="memdesc:abbeeee9510e44239d47b3c8079ee7c20 inherit pro_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Search for the closest nearest neighbor of a given point.  <a href="classpcl_1_1_registration.html#abbeeee9510e44239d47b3c8079ee7c20">更多...</a><br /></td></tr>
<tr class="separator:abbeeee9510e44239d47b3c8079ee7c20 inherit pro_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5eb5d425e7cc8a998f0e4b1b253a6f5 inherit pro_methods_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ae5eb5d425e7cc8a998f0e4b1b253a6f5"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ae5eb5d425e7cc8a998f0e4b1b253a6f5">computeTransformation</a> (<a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;output, const Matrix4 &amp;guess)=0</td></tr>
<tr class="memdesc:ae5eb5d425e7cc8a998f0e4b1b253a6f5 inherit pro_methods_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Abstract transformation computation method with initial guess <br /></td></tr>
<tr class="separator:ae5eb5d425e7cc8a998f0e4b1b253a6f5 inherit pro_methods_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 成员函数 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointSource &gt;</a></td></tr>
<tr class="memitem:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">initCompute</a> ()</td></tr>
<tr class="memdesc:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called before starting the actual computation.  <a href="classpcl_1_1_p_c_l_base.html#acceb20854934f4cf77e266eb5a44d4f0">更多...</a><br /></td></tr>
<tr class="separator:acceb20854934f4cf77e266eb5a44d4f0 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="afc426c4eebb94b7734d4fa556bff1420"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#afc426c4eebb94b7734d4fa556bff1420">deinitCompute</a> ()</td></tr>
<tr class="memdesc:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method should get called after finishing the actual computation. <br /></td></tr>
<tr class="separator:afc426c4eebb94b7734d4fa556bff1420 inherit pro_methods_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected 属性</h2></td></tr>
<tr class="memitem:acb7ebafdcdf51bb6a2209c66d7838fb0"><td class="memItemLeft" align="right" valign="top"><a id="acb7ebafdcdf51bb6a2209c66d7838fb0"></a>
<a class="el" href="classpcl_1_1_normal_distributions_transform.html#a0d245ca8e5df83bb576ea5bf61e513be">TargetGrid</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#acb7ebafdcdf51bb6a2209c66d7838fb0">target_cells_</a></td></tr>
<tr class="memdesc:acb7ebafdcdf51bb6a2209c66d7838fb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">The voxel grid generated from target cloud containing point means and covariances. <br /></td></tr>
<tr class="separator:acb7ebafdcdf51bb6a2209c66d7838fb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a979b1ab50b52b130e0b29fda50e0afb0"><td class="memItemLeft" align="right" valign="top"><a id="a979b1ab50b52b130e0b29fda50e0afb0"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">resolution_</a></td></tr>
<tr class="memdesc:a979b1ab50b52b130e0b29fda50e0afb0"><td class="mdescLeft">&#160;</td><td class="mdescRight">The side length of voxels. <br /></td></tr>
<tr class="separator:a979b1ab50b52b130e0b29fda50e0afb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15165f7e13bbfbc6a2e5e54bc8ed5c28"><td class="memItemLeft" align="right" valign="top"><a id="a15165f7e13bbfbc6a2e5e54bc8ed5c28"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a15165f7e13bbfbc6a2e5e54bc8ed5c28">step_size_</a></td></tr>
<tr class="memdesc:a15165f7e13bbfbc6a2e5e54bc8ed5c28"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum step length. <br /></td></tr>
<tr class="separator:a15165f7e13bbfbc6a2e5e54bc8ed5c28"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a779d3b4c4f5181eb4f5ed6a660c66471"><td class="memItemLeft" align="right" valign="top"><a id="a779d3b4c4f5181eb4f5ed6a660c66471"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a779d3b4c4f5181eb4f5ed6a660c66471">outlier_ratio_</a></td></tr>
<tr class="memdesc:a779d3b4c4f5181eb4f5ed6a660c66471"><td class="mdescLeft">&#160;</td><td class="mdescRight">The ratio of outliers of points w.r.t. a normal distribution, Equation 6.7 [Magnusson 2009]. <br /></td></tr>
<tr class="separator:a779d3b4c4f5181eb4f5ed6a660c66471"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b014c047dcf7fb8d5285e1cffeb125c"><td class="memItemLeft" align="right" valign="top"><a id="a7b014c047dcf7fb8d5285e1cffeb125c"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a7b014c047dcf7fb8d5285e1cffeb125c">gauss_d1_</a></td></tr>
<tr class="memdesc:a7b014c047dcf7fb8d5285e1cffeb125c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The normalization constants used fit the point distribution to a normal distribution, Equation 6.8 [Magnusson 2009]. <br /></td></tr>
<tr class="separator:a7b014c047dcf7fb8d5285e1cffeb125c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4c1362e9c212e213c98ad7679f30f1a"><td class="memItemLeft" align="right" valign="top"><a id="aa4c1362e9c212e213c98ad7679f30f1a"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><b>gauss_d2_</b></td></tr>
<tr class="separator:aa4c1362e9c212e213c98ad7679f30f1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ce7df093334bfbfba42233e15b3fede"><td class="memItemLeft" align="right" valign="top"><a id="a0ce7df093334bfbfba42233e15b3fede"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a0ce7df093334bfbfba42233e15b3fede">trans_probability_</a></td></tr>
<tr class="memdesc:a0ce7df093334bfbfba42233e15b3fede"><td class="mdescLeft">&#160;</td><td class="mdescRight">The probability score of the transform applied to the input cloud, Equation 6.9 and 6.10 [Magnusson 2009]. <br /></td></tr>
<tr class="separator:a0ce7df093334bfbfba42233e15b3fede"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a583433afdfb7aa6e817fb5603753b3f3"><td class="memItemLeft" align="right" valign="top">Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a583433afdfb7aa6e817fb5603753b3f3">j_ang_a_</a></td></tr>
<tr class="memdesc:a583433afdfb7aa6e817fb5603753b3f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Precomputed Angular Gradient  <a href="classpcl_1_1_normal_distributions_transform.html#a583433afdfb7aa6e817fb5603753b3f3">更多...</a><br /></td></tr>
<tr class="separator:a583433afdfb7aa6e817fb5603753b3f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f9d37ed53949085071b72fa9c6ea5e4"><td class="memItemLeft" align="right" valign="top"><a id="a3f9d37ed53949085071b72fa9c6ea5e4"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>j_ang_b_</b></td></tr>
<tr class="separator:a3f9d37ed53949085071b72fa9c6ea5e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08d6035f9898f0eb337ad8685227663e"><td class="memItemLeft" align="right" valign="top"><a id="a08d6035f9898f0eb337ad8685227663e"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>j_ang_c_</b></td></tr>
<tr class="separator:a08d6035f9898f0eb337ad8685227663e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f71b0577053e4ddc3e2e14c96d0c6a7"><td class="memItemLeft" align="right" valign="top"><a id="a0f71b0577053e4ddc3e2e14c96d0c6a7"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>j_ang_d_</b></td></tr>
<tr class="separator:a0f71b0577053e4ddc3e2e14c96d0c6a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9f5f2fb4a78a8ef10956d44589be652"><td class="memItemLeft" align="right" valign="top"><a id="af9f5f2fb4a78a8ef10956d44589be652"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>j_ang_e_</b></td></tr>
<tr class="separator:af9f5f2fb4a78a8ef10956d44589be652"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab63fda65e6d8e53a82fe2d49a345227c"><td class="memItemLeft" align="right" valign="top"><a id="ab63fda65e6d8e53a82fe2d49a345227c"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>j_ang_f_</b></td></tr>
<tr class="separator:ab63fda65e6d8e53a82fe2d49a345227c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf52d22cbf38c82d142222c00f4533db"><td class="memItemLeft" align="right" valign="top"><a id="abf52d22cbf38c82d142222c00f4533db"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>j_ang_g_</b></td></tr>
<tr class="separator:abf52d22cbf38c82d142222c00f4533db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3231f58522b2e2ebae9254f8f3b76883"><td class="memItemLeft" align="right" valign="top"><a id="a3231f58522b2e2ebae9254f8f3b76883"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>j_ang_h_</b></td></tr>
<tr class="separator:a3231f58522b2e2ebae9254f8f3b76883"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa87d6f6163465d5952f385120819169b"><td class="memItemLeft" align="right" valign="top">Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#aa87d6f6163465d5952f385120819169b">h_ang_a2_</a></td></tr>
<tr class="memdesc:aa87d6f6163465d5952f385120819169b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Precomputed Angular Hessian  <a href="classpcl_1_1_normal_distributions_transform.html#aa87d6f6163465d5952f385120819169b">更多...</a><br /></td></tr>
<tr class="separator:aa87d6f6163465d5952f385120819169b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24499997f4e074c1be911f5d3be58b30"><td class="memItemLeft" align="right" valign="top"><a id="a24499997f4e074c1be911f5d3be58b30"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_a3_</b></td></tr>
<tr class="separator:a24499997f4e074c1be911f5d3be58b30"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28e2d2600c461feee0edc323045c8229"><td class="memItemLeft" align="right" valign="top"><a id="a28e2d2600c461feee0edc323045c8229"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_b2_</b></td></tr>
<tr class="separator:a28e2d2600c461feee0edc323045c8229"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a48321dabffe92a96b2823e35aeb2068e"><td class="memItemLeft" align="right" valign="top"><a id="a48321dabffe92a96b2823e35aeb2068e"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_b3_</b></td></tr>
<tr class="separator:a48321dabffe92a96b2823e35aeb2068e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac14fbcfe48706f1296bdb3a91d69789d"><td class="memItemLeft" align="right" valign="top"><a id="ac14fbcfe48706f1296bdb3a91d69789d"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_c2_</b></td></tr>
<tr class="separator:ac14fbcfe48706f1296bdb3a91d69789d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae64350ac91587c66ae84fdc6ccc51924"><td class="memItemLeft" align="right" valign="top"><a id="ae64350ac91587c66ae84fdc6ccc51924"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_c3_</b></td></tr>
<tr class="separator:ae64350ac91587c66ae84fdc6ccc51924"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd5c6bfb7bac5228769127a74fc91a22"><td class="memItemLeft" align="right" valign="top"><a id="afd5c6bfb7bac5228769127a74fc91a22"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_d1_</b></td></tr>
<tr class="separator:afd5c6bfb7bac5228769127a74fc91a22"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa266fad2a838ea47bc96ebda27f9f1f"><td class="memItemLeft" align="right" valign="top"><a id="afa266fad2a838ea47bc96ebda27f9f1f"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_d2_</b></td></tr>
<tr class="separator:afa266fad2a838ea47bc96ebda27f9f1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a977355e4ed8831ea9fb9c1b4c614feed"><td class="memItemLeft" align="right" valign="top"><a id="a977355e4ed8831ea9fb9c1b4c614feed"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_d3_</b></td></tr>
<tr class="separator:a977355e4ed8831ea9fb9c1b4c614feed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf340e103f610226b58a3edef962ad3e"><td class="memItemLeft" align="right" valign="top"><a id="aaf340e103f610226b58a3edef962ad3e"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_e1_</b></td></tr>
<tr class="separator:aaf340e103f610226b58a3edef962ad3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49c141a43fa64e66fac85f4509f2f036"><td class="memItemLeft" align="right" valign="top"><a id="a49c141a43fa64e66fac85f4509f2f036"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_e2_</b></td></tr>
<tr class="separator:a49c141a43fa64e66fac85f4509f2f036"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c465ba1017426950c5a65079f92a5ea"><td class="memItemLeft" align="right" valign="top"><a id="a6c465ba1017426950c5a65079f92a5ea"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_e3_</b></td></tr>
<tr class="separator:a6c465ba1017426950c5a65079f92a5ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa3763fdc6524b07e0ff63e5746088fa"><td class="memItemLeft" align="right" valign="top"><a id="afa3763fdc6524b07e0ff63e5746088fa"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_f1_</b></td></tr>
<tr class="separator:afa3763fdc6524b07e0ff63e5746088fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09baeb58f50e2a6bcc2d06a6c4dcf66c"><td class="memItemLeft" align="right" valign="top"><a id="a09baeb58f50e2a6bcc2d06a6c4dcf66c"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_f2_</b></td></tr>
<tr class="separator:a09baeb58f50e2a6bcc2d06a6c4dcf66c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d285624d11a742ec42226b303a0d24a"><td class="memItemLeft" align="right" valign="top"><a id="a4d285624d11a742ec42226b303a0d24a"></a>
Eigen::Vector3d&#160;</td><td class="memItemRight" valign="bottom"><b>h_ang_f3_</b></td></tr>
<tr class="separator:a4d285624d11a742ec42226b303a0d24a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03884aff71b4d6263ea6b4a3346b87b1"><td class="memItemLeft" align="right" valign="top"><a id="a03884aff71b4d6263ea6b4a3346b87b1"></a>
Eigen::Matrix&lt; double, 3, 6 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a></td></tr>
<tr class="memdesc:a03884aff71b4d6263ea6b4a3346b87b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">The first order derivative of the transformation of a point w.r.t. the transform vector, <img class="formulaInl" alt="$ J_E $" src="form_72.png"/> in Equation 6.18 [Magnusson 2009]. <br /></td></tr>
<tr class="separator:a03884aff71b4d6263ea6b4a3346b87b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad2250a36e3b63a879bac14df26272e4d"><td class="memItemLeft" align="right" valign="top"><a id="ad2250a36e3b63a879bac14df26272e4d"></a>
Eigen::Matrix&lt; double, 18, 6 &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a></td></tr>
<tr class="memdesc:ad2250a36e3b63a879bac14df26272e4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">The second order derivative of the transformation of a point w.r.t. the transform vector, <img class="formulaInl" alt="$ H_E $" src="form_73.png"/> in Equation 6.20 [Magnusson 2009]. <br /></td></tr>
<tr class="separator:ad2250a36e3b63a879bac14df26272e4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_registration"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_registration')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_registration.html">pcl::Registration&lt; PointSource, PointTarget, Scalar &gt;</a></td></tr>
<tr class="memitem:a1e493af70763e05bcaf5ecd0ed7be63d inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a1e493af70763e05bcaf5ecd0ed7be63d"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a1e493af70763e05bcaf5ecd0ed7be63d">reg_name_</a></td></tr>
<tr class="memdesc:a1e493af70763e05bcaf5ecd0ed7be63d inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The registration method name. <br /></td></tr>
<tr class="separator:a1e493af70763e05bcaf5ecd0ed7be63d inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79b6170328705f29854aba00c4feb66d inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a79b6170328705f29854aba00c4feb66d"></a>
KdTreePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a79b6170328705f29854aba00c4feb66d">tree_</a></td></tr>
<tr class="memdesc:a79b6170328705f29854aba00c4feb66d inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the spatial search object. <br /></td></tr>
<tr class="separator:a79b6170328705f29854aba00c4feb66d inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3362d946f4b60e2628dc02e2af1f24fd inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a3362d946f4b60e2628dc02e2af1f24fd"></a>
KdTreeReciprocalPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a3362d946f4b60e2628dc02e2af1f24fd">tree_reciprocal_</a></td></tr>
<tr class="memdesc:a3362d946f4b60e2628dc02e2af1f24fd inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the spatial search object of the source. <br /></td></tr>
<tr class="separator:a3362d946f4b60e2628dc02e2af1f24fd inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6957c3193d73098cb0535d6625d591d4 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a6957c3193d73098cb0535d6625d591d4"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a6957c3193d73098cb0535d6625d591d4">nr_iterations_</a></td></tr>
<tr class="memdesc:a6957c3193d73098cb0535d6625d591d4 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of iterations the internal optimization ran for (used internally). <br /></td></tr>
<tr class="separator:a6957c3193d73098cb0535d6625d591d4 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa776d097d20137f2702a275d931989d2 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="aa776d097d20137f2702a275d931989d2"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#aa776d097d20137f2702a275d931989d2">max_iterations_</a></td></tr>
<tr class="memdesc:aa776d097d20137f2702a275d931989d2 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum number of iterations the internal optimization should run for. The default value is 10. <br /></td></tr>
<tr class="separator:aa776d097d20137f2702a275d931989d2 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9099e6970624c4ee91817f3f97f82f7f inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a9099e6970624c4ee91817f3f97f82f7f"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a9099e6970624c4ee91817f3f97f82f7f">ransac_iterations_</a></td></tr>
<tr class="memdesc:a9099e6970624c4ee91817f3f97f82f7f inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of iterations RANSAC should run for. <br /></td></tr>
<tr class="separator:a9099e6970624c4ee91817f3f97f82f7f inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9ac08a379a3b5db44c5c502cf6a882e inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="af9ac08a379a3b5db44c5c502cf6a882e"></a>
PointCloudTargetConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a></td></tr>
<tr class="memdesc:af9ac08a379a3b5db44c5c502cf6a882e inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input point cloud dataset target. <br /></td></tr>
<tr class="separator:af9ac08a379a3b5db44c5c502cf6a882e inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a023e79a041ee70e8383654432cf5a71e inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a023e79a041ee70e8383654432cf5a71e"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a></td></tr>
<tr class="memdesc:a023e79a041ee70e8383654432cf5a71e inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The final transformation matrix estimated by the registration method after N iterations. <br /></td></tr>
<tr class="separator:a023e79a041ee70e8383654432cf5a71e inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2cdeaab1c7d5e156a7bd35ee71c1f0db inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a2cdeaab1c7d5e156a7bd35ee71c1f0db"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a2cdeaab1c7d5e156a7bd35ee71c1f0db">transformation_</a></td></tr>
<tr class="memdesc:a2cdeaab1c7d5e156a7bd35ee71c1f0db inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The transformation matrix estimated by the registration method. <br /></td></tr>
<tr class="separator:a2cdeaab1c7d5e156a7bd35ee71c1f0db inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d0064ba2f733ef07476f42de09a656f inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a8d0064ba2f733ef07476f42de09a656f"></a>
Matrix4&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a8d0064ba2f733ef07476f42de09a656f">previous_transformation_</a></td></tr>
<tr class="memdesc:a8d0064ba2f733ef07476f42de09a656f inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The previous transformation matrix estimated by the registration method (used internally). <br /></td></tr>
<tr class="separator:a8d0064ba2f733ef07476f42de09a656f inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adbd6519634f433c0be2fd640c0c75108 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="adbd6519634f433c0be2fd640c0c75108"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#adbd6519634f433c0be2fd640c0c75108">transformation_epsilon_</a></td></tr>
<tr class="memdesc:adbd6519634f433c0be2fd640c0c75108 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum difference between two consecutive transformations in order to consider convergence (user defined). <br /></td></tr>
<tr class="separator:adbd6519634f433c0be2fd640c0c75108 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5bf2297e961c3012bffe79fdd2d495d inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ab5bf2297e961c3012bffe79fdd2d495d"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ab5bf2297e961c3012bffe79fdd2d495d">euclidean_fitness_epsilon_</a></td></tr>
<tr class="memdesc:ab5bf2297e961c3012bffe79fdd2d495d inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum allowed Euclidean error between two consecutive steps in the ICP loop, before the algorithm is considered to have converged. The error is estimated as the sum of the differences between correspondences in an Euclidean sense, divided by the number of correspondences. <br /></td></tr>
<tr class="separator:ab5bf2297e961c3012bffe79fdd2d495d inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15aa975f33a8f22573bad118ddda10dd inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a15aa975f33a8f22573bad118ddda10dd"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a15aa975f33a8f22573bad118ddda10dd">corr_dist_threshold_</a></td></tr>
<tr class="memdesc:a15aa975f33a8f22573bad118ddda10dd inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum distance threshold between two correspondent points in source &lt;-&gt; target. If the distance is larger than this threshold, the points will be ignored in the alignement process. <br /></td></tr>
<tr class="separator:a15aa975f33a8f22573bad118ddda10dd inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5d7a9089d15932a78775dbb0b30d42f inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ab5d7a9089d15932a78775dbb0b30d42f"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ab5d7a9089d15932a78775dbb0b30d42f">inlier_threshold_</a></td></tr>
<tr class="memdesc:ab5d7a9089d15932a78775dbb0b30d42f inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The inlier distance threshold for the internal RANSAC outlier rejection loop. The method considers a point to be an inlier, if the distance between the target data index and the transformed source index is smaller than the given inlier distance threshold. The default value is 0.05. <br /></td></tr>
<tr class="separator:ab5d7a9089d15932a78775dbb0b30d42f inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e94793b677e107410ebb29ea2f931e9 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a8e94793b677e107410ebb29ea2f931e9"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">converged_</a></td></tr>
<tr class="memdesc:a8e94793b677e107410ebb29ea2f931e9 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Holds internal convergence state, given user parameters. <br /></td></tr>
<tr class="separator:a8e94793b677e107410ebb29ea2f931e9 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae33bc2efe08f2fff1a35df1b3d602036 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ae33bc2efe08f2fff1a35df1b3d602036"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ae33bc2efe08f2fff1a35df1b3d602036">min_number_correspondences_</a></td></tr>
<tr class="memdesc:ae33bc2efe08f2fff1a35df1b3d602036 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The minimum number of correspondences that the algorithm needs before attempting to estimate the transformation. The default value is 3. <br /></td></tr>
<tr class="separator:ae33bc2efe08f2fff1a35df1b3d602036 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98f1c160391fff07f34339b63286e228 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a98f1c160391fff07f34339b63286e228"></a>
CorrespondencesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a98f1c160391fff07f34339b63286e228">correspondences_</a></td></tr>
<tr class="memdesc:a98f1c160391fff07f34339b63286e228 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The set of correspondences determined at this ICP step. <br /></td></tr>
<tr class="separator:a98f1c160391fff07f34339b63286e228 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a99baaa7e513bda9103c58fd1471557ed inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a99baaa7e513bda9103c58fd1471557ed"></a>
TransformationEstimationPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a99baaa7e513bda9103c58fd1471557ed">transformation_estimation_</a></td></tr>
<tr class="memdesc:a99baaa7e513bda9103c58fd1471557ed inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A TransformationEstimation object, used to calculate the 4x4 rigid transformation. <br /></td></tr>
<tr class="separator:a99baaa7e513bda9103c58fd1471557ed inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f5e6122a988e5114f4caa1212920444 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a5f5e6122a988e5114f4caa1212920444"></a>
CorrespondenceEstimationPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a5f5e6122a988e5114f4caa1212920444">correspondence_estimation_</a></td></tr>
<tr class="memdesc:a5f5e6122a988e5114f4caa1212920444 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A CorrespondenceEstimation object, used to estimate correspondences between the source and the target cloud. <br /></td></tr>
<tr class="separator:a5f5e6122a988e5114f4caa1212920444 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc73c4731a1e01ac100ebf4659578e1c inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="adc73c4731a1e01ac100ebf4659578e1c"></a>
std::vector&lt; CorrespondenceRejectorPtr &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#adc73c4731a1e01ac100ebf4659578e1c">correspondence_rejectors_</a></td></tr>
<tr class="memdesc:adc73c4731a1e01ac100ebf4659578e1c inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">The list of correspondence rejectors to use. <br /></td></tr>
<tr class="separator:adc73c4731a1e01ac100ebf4659578e1c inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0167493576dabedd7678aa6811dee363 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a0167493576dabedd7678aa6811dee363"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a0167493576dabedd7678aa6811dee363">target_cloud_updated_</a></td></tr>
<tr class="memdesc:a0167493576dabedd7678aa6811dee363 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable that stores whether we have a new target cloud, meaning we need to pre-process it again. This way, we avoid rebuilding the kd-tree for the target cloud every time the determineCorrespondences () method is called. <br /></td></tr>
<tr class="separator:a0167493576dabedd7678aa6811dee363 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefd89f31379081d9cc75e3ce9ab1a947 inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="aefd89f31379081d9cc75e3ce9ab1a947"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#aefd89f31379081d9cc75e3ce9ab1a947">source_cloud_updated_</a></td></tr>
<tr class="memdesc:aefd89f31379081d9cc75e3ce9ab1a947 inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable that stores whether we have a new source cloud, meaning we need to pre-process it again. This way, we avoid rebuilding the reciprocal kd-tree for the source cloud every time the determineCorrespondences () method is called. <br /></td></tr>
<tr class="separator:aefd89f31379081d9cc75e3ce9ab1a947 inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6335de3036d6e0fe9a3942cd6f30c87f inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a6335de3036d6e0fe9a3942cd6f30c87f"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a6335de3036d6e0fe9a3942cd6f30c87f">force_no_recompute_</a></td></tr>
<tr class="memdesc:a6335de3036d6e0fe9a3942cd6f30c87f inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A flag which, if set, means the tree operating on the target cloud will never be recomputed <br /></td></tr>
<tr class="separator:a6335de3036d6e0fe9a3942cd6f30c87f inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1fc63c91641a5e160aa19108a7811ec inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="ad1fc63c91641a5e160aa19108a7811ec"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#ad1fc63c91641a5e160aa19108a7811ec">force_no_recompute_reciprocal_</a></td></tr>
<tr class="memdesc:ad1fc63c91641a5e160aa19108a7811ec inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">A flag which, if set, means the tree operating on the source cloud will never be recomputed <br /></td></tr>
<tr class="separator:ad1fc63c91641a5e160aa19108a7811ec inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a010905bbc1bc67175d3ecf3b2ea6401a inherit pro_attribs_classpcl_1_1_registration"><td class="memItemLeft" align="right" valign="top"><a id="a010905bbc1bc67175d3ecf3b2ea6401a"></a>
boost::function&lt; void(const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointSource &gt; &amp;cloud_src, const std::vector&lt; int &gt; &amp;indices_src, const <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; PointTarget &gt; &amp;cloud_tgt, const std::vector&lt; int &gt; &amp;indices_tgt)&gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_registration.html#a010905bbc1bc67175d3ecf3b2ea6401a">update_visualizer_</a></td></tr>
<tr class="memdesc:a010905bbc1bc67175d3ecf3b2ea6401a inherit pro_attribs_classpcl_1_1_registration"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback function to update intermediate source point cloud position during it's registration to the target point cloud. <br /></td></tr>
<tr class="separator:a010905bbc1bc67175d3ecf3b2ea6401a inherit pro_attribs_classpcl_1_1_registration"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classpcl_1_1_p_c_l_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classpcl_1_1_p_c_l_base')"><img src="closed.png" alt="-"/>&#160;Protected 属性 继承自 <a class="el" href="classpcl_1_1_p_c_l_base.html">pcl::PCLBase&lt; PointSource &gt;</a></td></tr>
<tr class="memitem:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="a09c70d8e06e3fb4f07903fe6f8d67869"></a>
PointCloudConstPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a></td></tr>
<tr class="memdesc:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">The input point cloud dataset. <br /></td></tr>
<tr class="separator:a09c70d8e06e3fb4f07903fe6f8d67869 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="aaee847c8a517ebf365bad2cb182a6626"></a>
IndicesPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#aaee847c8a517ebf365bad2cb182a6626">indices_</a></td></tr>
<tr class="memdesc:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pointer to the vector of point indices to use. <br /></td></tr>
<tr class="separator:aaee847c8a517ebf365bad2cb182a6626 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="ada1eadb824d34ca9206a86343d9760bb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#ada1eadb824d34ca9206a86343d9760bb">use_indices_</a></td></tr>
<tr class="memdesc:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to true if point indices are used. <br /></td></tr>
<tr class="separator:ada1eadb824d34ca9206a86343d9760bb inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memItemLeft" align="right" valign="top"><a id="adadb0299f144528020ed558af6879662"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1_p_c_l_base.html#adadb0299f144528020ed558af6879662">fake_indices_</a></td></tr>
<tr class="memdesc:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="mdescLeft">&#160;</td><td class="mdescRight">If no set of indices are given, we construct a set of fake indices that mimic the input PointCloud. <br /></td></tr>
<tr class="separator:adadb0299f144528020ed558af6879662 inherit pro_attribs_classpcl_1_1_p_c_l_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename PointSource, typename PointTarget&gt;<br />
class pcl::NormalDistributionsTransform&lt; PointSource, PointTarget &gt;</h3>

<p>A 3D <a class="el" href="structpcl_1_1_normal.html" title="A point structure representing normal coordinates and the surface curvature estimate....">Normal</a> Distribution Transform registration implementation for point cloud data. </p>
<dl class="section note"><dt>注解</dt><dd>For more information please see <b>Magnusson, M. (2009). The Three-Dimensional Normal-Distributions Transform — an Efﬁcient Representation for <a class="el" href="classpcl_1_1_registration.html" title="Registration represents the base registration class for general purpose, ICP-like methods.">Registration</a>, Surface Analysis, and Loop Detection. PhD thesis, Orebro University. Orebro Studies in Technology 36.</b>, <b>More, J., and Thuente, D. (1994). Line Search Algorithm with Guaranteed Sufficient Decrease In ACM Transactions on Mathematical Software.</b> and Sun, W. and Yuan, Y, (2006) Optimization Theory and Methods: Nonlinear Programming. 89-100 </dd>
<dd>
Math refactored by Todor Stoyanov. </dd></dl>
<dl class="section author"><dt>作者</dt><dd>Brian Okorn (Space and Naval Warfare Systems Center Pacific) </dd></dl>
</div><h2 class="groupheader">成员函数说明</h2>
<a id="a93428f5aa08e84203bde53cd554c6794"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93428f5aa08e84203bde53cd554c6794">&#9670;&nbsp;</a></span>auxilaryFunction_dPsiMT()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::auxilaryFunction_dPsiMT </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>g_a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>g_0</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>mu</em> = <code>1.e-4</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Auxilary function derivative used to determin endpoints of More-Thuente interval. </p>
<dl class="section note"><dt>注解</dt><dd><img class="formulaInl" alt="$ \psi'(\alpha) $" src="form_70.png"/>, derivative of Equation 1.6 (Moore, Thuente 1994) </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">g_a</td><td>function gradient at step length a, <img class="formulaInl" alt="$ \phi'(\alpha) $" src="form_71.png"/> in More-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">g_0</td><td>initial function gradiant, <img class="formulaInl" alt="$ \phi'(0) $" src="form_69.png"/> in More-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">mu</td><td>the step length, constant <img class="formulaInl" alt="$ \mu $" src="form_20.png"/> in Equation 1.1 [More, Thuente 1994] </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>sufficent decrease derivative </dd></dl>
<div class="fragment"><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;      {</div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        <span class="keywordflow">return</span> (g_a - mu * g_0);</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a8fc05efdb729b163d4e3f175186b5e5a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8fc05efdb729b163d4e3f175186b5e5a">&#9670;&nbsp;</a></span>auxilaryFunction_PsiMT()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::auxilaryFunction_PsiMT </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>f_a</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>f_0</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>g_0</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>mu</em> = <code>1.e-4</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Auxilary function used to determin endpoints of More-Thuente interval. </p>
<dl class="section note"><dt>注解</dt><dd><img class="formulaInl" alt="$ \psi(\alpha) $" src="form_65.png"/> in Equation 1.6 (Moore, Thuente 1994) </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>the step length, <img class="formulaInl" alt="$ \alpha $" src="form_66.png"/> in More-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">f_a</td><td>function value at step length a, <img class="formulaInl" alt="$ \phi(\alpha) $" src="form_67.png"/> in More-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">f_0</td><td>initial function value, <img class="formulaInl" alt="$ \phi(0) $" src="form_68.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">g_0</td><td>initial function gradiant, <img class="formulaInl" alt="$ \phi'(0) $" src="form_69.png"/> in More-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">mu</td><td>the step length, constant <img class="formulaInl" alt="$ \mu $" src="form_20.png"/> in Equation 1.1 [More, Thuente 1994] </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>sufficent decrease value </dd></dl>
<div class="fragment"><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;      {</div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;        <span class="keywordflow">return</span> (f_a - f_0 - mu * g_0 * a);</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="af99468f56f6bb95bef79193ab0b16205"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af99468f56f6bb95bef79193ab0b16205">&#9670;&nbsp;</a></span>computeAngleDerivatives()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::computeAngleDerivatives </td>
          <td>(</td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>compute_hessian</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Precompute anglular components of derivatives. </p>
<dl class="section note"><dt>注解</dt><dd>Equation 6.19 and 6.21 [Magnusson 2009]. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>the current transform vector </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">compute_hessian</td><td>flag to calculate hessian, unnessissary for step calculation. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;{</div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  <span class="comment">// Simplified math for near 0 angles</span></div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  <span class="keywordtype">double</span> cx, cy, cz, sx, sy, sz;</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  <span class="keywordflow">if</span> (fabs (p (3)) &lt; 10e-5)</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  {</div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="comment">//p(3) = 0;</span></div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    cx = 1.0;</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    sx = 0.0;</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  }</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  {</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    cx = cos (p (3));</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    sx = sin (p (3));</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  }</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <span class="keywordflow">if</span> (fabs (p (4)) &lt; 10e-5)</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  {</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="comment">//p(4) = 0;</span></div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    cy = 1.0;</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    sy = 0.0;</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  }</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  {</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    cy = cos (p (4));</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    sy = sin (p (4));</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  }</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160; </div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  <span class="keywordflow">if</span> (fabs (p (5)) &lt; 10e-5)</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;  {</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="comment">//p(5) = 0;</span></div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    cz = 1.0;</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    sz = 0.0;</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;  }</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  {</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    cz = cos (p (5));</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    sz = sin (p (5));</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;  }</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160; </div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  <span class="comment">// Precomputed angular gradiant components. Letters correspond to Equation 6.19 [Magnusson 2009]</span></div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a583433afdfb7aa6e817fb5603753b3f3">j_ang_a_</a> &lt;&lt; (-sx * sz + cx * sy * cz), (-sx * cz - cx * sy * sz), (-cx * cy);</div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  j_ang_b_ &lt;&lt; (cx * sz + sx * sy * cz), (cx * cz - sx * sy * sz), (-sx * cy);</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  j_ang_c_ &lt;&lt; (-sy * cz), sy * sz, cy;</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  j_ang_d_ &lt;&lt; sx * cy * cz, (-sx * cy * sz), sx * sy;</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  j_ang_e_ &lt;&lt; (-cx * cy * cz), cx * cy * sz, (-cx * sy);</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;  j_ang_f_ &lt;&lt; (-cy * sz), (-cy * cz), 0;</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  j_ang_g_ &lt;&lt; (cx * cz - sx * sy * sz), (-cx * sz - sx * sy * cz), 0;</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  j_ang_h_ &lt;&lt; (sx * cz + cx * sy * sz), (cx * sy * cz - sx * sz), 0;</div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160; </div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  <span class="keywordflow">if</span> (compute_hessian)</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;  {</div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <span class="comment">// Precomputed angular hessian components. Letters correspond to Equation 6.21 and numbers correspond to row index [Magnusson 2009]</span></div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#aa87d6f6163465d5952f385120819169b">h_ang_a2_</a> &lt;&lt; (-cx * sz - sx * sy * cz), (-cx * cz + sx * sy * sz), sx * cy;</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    h_ang_a3_ &lt;&lt; (-sx * sz + cx * sy * cz), (-cx * sy * sz - sx * cz), (-cx * cy);</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160; </div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    h_ang_b2_ &lt;&lt; (cx * cy * cz), (-cx * cy * sz), (cx * sy);</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    h_ang_b3_ &lt;&lt; (sx * cy * cz), (-sx * cy * sz), (sx * sy);</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    h_ang_c2_ &lt;&lt; (-sx * cz - cx * sy * sz), (sx * sz - cx * sy * cz), 0;</div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    h_ang_c3_ &lt;&lt; (cx * cz - sx * sy * sz), (-sx * sy * cz - cx * sz), 0;</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160; </div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    h_ang_d1_ &lt;&lt; (-cy * cz), (cy * sz), (sy);</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    h_ang_d2_ &lt;&lt; (-sx * sy * cz), (sx * sy * sz), (sx * cy);</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    h_ang_d3_ &lt;&lt; (cx * sy * cz), (-cx * sy * sz), (-cx * cy);</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160; </div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    h_ang_e1_ &lt;&lt; (sy * sz), (sy * cz), 0;</div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    h_ang_e2_ &lt;&lt; (-sx * cy * sz), (-sx * cy * cz), 0;</div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    h_ang_e3_ &lt;&lt; (cx * cy * sz), (cx * cy * cz), 0;</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160; </div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    h_ang_f1_ &lt;&lt; (-cy * cz), (cy * sz), 0;</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    h_ang_f2_ &lt;&lt; (-cx * sz - sx * sy * cz), (-cx * cz + sx * sy * sz), 0;</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    h_ang_f3_ &lt;&lt; (-sx * sz + cx * sy * cz), (-cx * sy * sz - sx * cz), 0;</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  }</div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a583433afdfb7aa6e817fb5603753b3f3"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a583433afdfb7aa6e817fb5603753b3f3">pcl::NormalDistributionsTransform::j_ang_a_</a></div><div class="ttdeci">Eigen::Vector3d j_ang_a_</div><div class="ttdoc">Precomputed Angular Gradient</div><div class="ttdef"><b>Definition:</b> ndt.h:441</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_aa87d6f6163465d5952f385120819169b"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#aa87d6f6163465d5952f385120819169b">pcl::NormalDistributionsTransform::h_ang_a2_</a></div><div class="ttdeci">Eigen::Vector3d h_ang_a2_</div><div class="ttdoc">Precomputed Angular Hessian</div><div class="ttdef"><b>Definition:</b> ndt.h:447</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a2eb79c026d9ec3bde70cf4b53377aa53"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2eb79c026d9ec3bde70cf4b53377aa53">&#9670;&nbsp;</a></span>computeDerivatives()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::computeDerivatives </td>
          <td>(</td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>score_gradient</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 6 &gt; &amp;&#160;</td>
          <td class="paramname"><em>hessian</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;&#160;</td>
          <td class="paramname"><em>trans_cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>compute_hessian</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute derivatives of probability function w.r.t. the transformation vector. </p>
<dl class="section note"><dt>注解</dt><dd>Equation 6.10, 6.12 and 6.13 [Magnusson 2009]. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">score_gradient</td><td>the gradient vector of the probability function w.r.t. the transformation vector </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">hessian</td><td>the hessian matrix of the probability function w.r.t. the transformation vector </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">trans_cloud</td><td>transformed point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>the current transform vector </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">compute_hessian</td><td>flag to calculate hessian, unnessissary for step calculation. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;{</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  <span class="comment">// Original Point and Transformed Point</span></div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  PointSource x_pt, x_trans_pt;</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  <span class="comment">// Original Point and Transformed Point (for math)</span></div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  Eigen::Vector3d x, x_trans;</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  <span class="comment">// Occupied Voxel</span></div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ae241178695742c3cc138682b32f5f4b0">TargetGridLeafConstPtr</a> cell;</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  <span class="comment">// Inverse Covariance of Occupied Voxel</span></div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;  Eigen::Matrix3d c_inv;</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  score_gradient.setZero ();</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  hessian.setZero ();</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="keywordtype">double</span> score = 0;</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160; </div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  <span class="comment">// Precompute Angular Derivatives (eq. 6.19 and 6.21)[Magnusson 2009]</span></div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#af99468f56f6bb95bef79193ab0b16205">computeAngleDerivatives</a> (p);</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160; </div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  <span class="comment">// Update gradient and hessian for each point, line 17 in Algorithm 2 [Magnusson 2009]</span></div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> idx = 0; idx &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points.size (); idx++)</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  {</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    x_trans_pt = trans_cloud.points[idx];</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160; </div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    <span class="comment">// Find nieghbors (Radius search has been experimentally faster than direct neighbor checking.</span></div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    std::vector&lt;TargetGridLeafConstPtr&gt; neighborhood;</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    std::vector&lt;float&gt; distances;</div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#acb7ebafdcdf51bb6a2209c66d7838fb0">target_cells_</a>.<a class="code" href="classpcl_1_1_voxel_grid_covariance.html#a5d605050ddda36d46f286a10469e26c1">radiusSearch</a> (x_trans_pt, <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">resolution_</a>, neighborhood, distances);</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector&lt;TargetGridLeafConstPtr&gt;::iterator neighborhood_it = neighborhood.begin (); neighborhood_it != neighborhood.end (); neighborhood_it++)</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    {</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;      cell = *neighborhood_it;</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;      x_pt = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[idx];</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;      x = Eigen::Vector3d (x_pt.x, x_pt.y, x_pt.z);</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160; </div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;      x_trans = Eigen::Vector3d (x_trans_pt.x, x_trans_pt.y, x_trans_pt.z);</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160; </div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;      <span class="comment">// Denorm point, x_k&#39; in Equations 6.12 and 6.13 [Magnusson 2009]</span></div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;      x_trans -= cell-&gt;getMean ();</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;      <span class="comment">// Uses precomputed covariance for speed.</span></div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;      c_inv = cell-&gt;getInverseCov ();</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160; </div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;      <span class="comment">// Compute derivative of transform function w.r.t. transform vector, J_E and H_E in Equations 6.18 and 6.20 [Magnusson 2009]</span></div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      <a class="code" href="classpcl_1_1_normal_distributions_transform.html#acdba743aa6ea3747e2fddeed10cc5ec1">computePointDerivatives</a> (x);</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;      <span class="comment">// Update score, gradient and hessian, lines 19-21 in Algorithm 2, according to Equations 6.10, 6.12 and 6.13, respectively [Magnusson 2009]</span></div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;      score += <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad006c7315b1f52de25efc41183c5ed60">updateDerivatives</a> (score_gradient, hessian, x_trans, c_inv, compute_hessian);</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    }</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  }</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  <span class="keywordflow">return</span> (score);</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a979b1ab50b52b130e0b29fda50e0afb0"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">pcl::NormalDistributionsTransform::resolution_</a></div><div class="ttdeci">float resolution_</div><div class="ttdoc">The side length of voxels.</div><div class="ttdef"><b>Definition:</b> ndt.h:423</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_acb7ebafdcdf51bb6a2209c66d7838fb0"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#acb7ebafdcdf51bb6a2209c66d7838fb0">pcl::NormalDistributionsTransform::target_cells_</a></div><div class="ttdeci">TargetGrid target_cells_</div><div class="ttdoc">The voxel grid generated from target cloud containing point means and covariances.</div><div class="ttdef"><b>Definition:</b> ndt.h:418</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_acdba743aa6ea3747e2fddeed10cc5ec1"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#acdba743aa6ea3747e2fddeed10cc5ec1">pcl::NormalDistributionsTransform::computePointDerivatives</a></div><div class="ttdeci">void computePointDerivatives(Eigen::Vector3d &amp;x, bool compute_hessian=true)</div><div class="ttdoc">Compute point derivatives.</div><div class="ttdef"><b>Definition:</b> ndt.hpp:310</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_ad006c7315b1f52de25efc41183c5ed60"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#ad006c7315b1f52de25efc41183c5ed60">pcl::NormalDistributionsTransform::updateDerivatives</a></div><div class="ttdeci">double updateDerivatives(Eigen::Matrix&lt; double, 6, 1 &gt; &amp;score_gradient, Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, Eigen::Vector3d &amp;x_trans, Eigen::Matrix3d &amp;c_inv, bool compute_hessian=true)</div><div class="ttdoc">Compute individual point contirbutions to derivatives of probability function w.r....</div><div class="ttdef"><b>Definition:</b> ndt.hpp:351</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_ae241178695742c3cc138682b32f5f4b0"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#ae241178695742c3cc138682b32f5f4b0">pcl::NormalDistributionsTransform::TargetGridLeafConstPtr</a></div><div class="ttdeci">TargetGrid::LeafConstPtr TargetGridLeafConstPtr</div><div class="ttdoc">Typename of const pointer to searchable voxel grid leaf.</div><div class="ttdef"><b>Definition:</b> ndt.h:85</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_af99468f56f6bb95bef79193ab0b16205"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#af99468f56f6bb95bef79193ab0b16205">pcl::NormalDistributionsTransform::computeAngleDerivatives</a></div><div class="ttdeci">void computeAngleDerivatives(Eigen::Matrix&lt; double, 6, 1 &gt; &amp;p, bool compute_hessian=true)</div><div class="ttdoc">Precompute anglular components of derivatives.</div><div class="ttdef"><b>Definition:</b> ndt.hpp:233</div></div>
<div class="ttc" id="aclasspcl_1_1_p_c_l_base_html_a09c70d8e06e3fb4f07903fe6f8d67869"><div class="ttname"><a href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">pcl::PCLBase&lt; PointSource &gt;::input_</a></div><div class="ttdeci">PointCloudConstPtr input_</div><div class="ttdoc">The input point cloud dataset.</div><div class="ttdef"><b>Definition:</b> pcl_base.h:150</div></div>
<div class="ttc" id="aclasspcl_1_1_voxel_grid_covariance_html_a5d605050ddda36d46f286a10469e26c1"><div class="ttname"><a href="classpcl_1_1_voxel_grid_covariance.html#a5d605050ddda36d46f286a10469e26c1">pcl::VoxelGridCovariance::radiusSearch</a></div><div class="ttdeci">int radiusSearch(const PointT &amp;point, double radius, std::vector&lt; LeafConstPtr &gt; &amp;k_leaves, std::vector&lt; float &gt; &amp;k_sqr_distances, unsigned int max_nn=0)</div><div class="ttdoc">Search for all the nearest occupied voxels of the query point in a given radius.</div><div class="ttdef"><b>Definition:</b> voxel_grid_covariance.h:468</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a12a31cfee6372534d795c1f65fbfbd2d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12a31cfee6372534d795c1f65fbfbd2d">&#9670;&nbsp;</a></span>computeHessian()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::computeHessian </td>
          <td>(</td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 6 &gt; &amp;&#160;</td>
          <td class="paramname"><em>hessian</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;&#160;</td>
          <td class="paramname"><em>trans_cloud</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>p</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute hessian of probability function w.r.t. the transformation vector. </p>
<dl class="section note"><dt>注解</dt><dd>Equation 6.13 [Magnusson 2009]. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">hessian</td><td>the hessian matrix of the probability function w.r.t. the transformation vector </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">trans_cloud</td><td>transformed point cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>the current transform vector </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;{</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;  <span class="comment">// Original Point and Transformed Point</span></div>
<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;  PointSource x_pt, x_trans_pt;</div>
<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;  <span class="comment">// Original Point and Transformed Point (for math)</span></div>
<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;  Eigen::Vector3d x, x_trans;</div>
<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;  <span class="comment">// Occupied Voxel</span></div>
<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ae241178695742c3cc138682b32f5f4b0">TargetGridLeafConstPtr</a> cell;</div>
<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;  <span class="comment">// Inverse Covariance of Occupied Voxel</span></div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;  Eigen::Matrix3d c_inv;</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160; </div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;  hessian.setZero ();</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160; </div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  <span class="comment">// Precompute Angular Derivatives unessisary because only used after regular derivative calculation</span></div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160; </div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;  <span class="comment">// Update hessian for each point, line 17 in Algorithm 2 [Magnusson 2009]</span></div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> idx = 0; idx &lt; <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points.size (); idx++)</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;  {</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    x_trans_pt = trans_cloud.points[idx];</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160; </div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    <span class="comment">// Find nieghbors (Radius search has been experimentally faster than direct neighbor checking.</span></div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    std::vector&lt;TargetGridLeafConstPtr&gt; neighborhood;</div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    std::vector&lt;float&gt; distances;</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#acb7ebafdcdf51bb6a2209c66d7838fb0">target_cells_</a>.<a class="code" href="classpcl_1_1_voxel_grid_covariance.html#a5d605050ddda36d46f286a10469e26c1">radiusSearch</a> (x_trans_pt, <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">resolution_</a>, neighborhood, distances);</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160; </div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">typename</span> std::vector&lt;TargetGridLeafConstPtr&gt;::iterator neighborhood_it = neighborhood.begin (); neighborhood_it != neighborhood.end (); neighborhood_it++)</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    {</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;      cell = *neighborhood_it;</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160; </div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;      {</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        x_pt = <a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points[idx];</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        x = Eigen::Vector3d (x_pt.x, x_pt.y, x_pt.z);</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160; </div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;        x_trans = Eigen::Vector3d (x_trans_pt.x, x_trans_pt.y, x_trans_pt.z);</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160; </div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;        <span class="comment">// Denorm point, x_k&#39; in Equations 6.12 and 6.13 [Magnusson 2009]</span></div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;        x_trans -= cell-&gt;getMean ();</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;        <span class="comment">// Uses precomputed covariance for speed.</span></div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;        c_inv = cell-&gt;getInverseCov ();</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160; </div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        <span class="comment">// Compute derivative of transform function w.r.t. transform vector, J_E and H_E in Equations 6.18 and 6.20 [Magnusson 2009]</span></div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;        <a class="code" href="classpcl_1_1_normal_distributions_transform.html#acdba743aa6ea3747e2fddeed10cc5ec1">computePointDerivatives</a> (x);</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;        <span class="comment">// Update hessian, lines 21 in Algorithm 2, according to Equations 6.10, 6.12 and 6.13, respectively [Magnusson 2009]</span></div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;        <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a9c6bd836040e430eea730cd6d16694f9">updateHessian</a> (hessian, x_trans, c_inv);</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;      }</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    }</div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  }</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a9c6bd836040e430eea730cd6d16694f9"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a9c6bd836040e430eea730cd6d16694f9">pcl::NormalDistributionsTransform::updateHessian</a></div><div class="ttdeci">void updateHessian(Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, Eigen::Vector3d &amp;x_trans, Eigen::Matrix3d &amp;c_inv)</div><div class="ttdoc">Compute individual point contirbutions to hessian of probability function w.r.t. the transformation v...</div><div class="ttdef"><b>Definition:</b> ndt.hpp:449</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="acdba743aa6ea3747e2fddeed10cc5ec1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acdba743aa6ea3747e2fddeed10cc5ec1">&#9670;&nbsp;</a></span>computePointDerivatives()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::computePointDerivatives </td>
          <td>(</td>
          <td class="paramtype">Eigen::Vector3d &amp;&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>compute_hessian</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute point derivatives. </p>
<dl class="section note"><dt>注解</dt><dd>Equation 6.18-21 [Magnusson 2009]. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>point from the input cloud </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">compute_hessian</td><td>flag to calculate hessian, unnessissary for step calculation. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;{</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  <span class="comment">// Calculate first derivative of Transformation Equation 6.17 w.r.t. transform vector p.</span></div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;  <span class="comment">// Derivative w.r.t. ith element of transform vector corresponds to column i, Equation 6.18 and 6.19 [Magnusson 2009]</span></div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a> (1, 3) = x.dot (<a class="code" href="classpcl_1_1_normal_distributions_transform.html#a583433afdfb7aa6e817fb5603753b3f3">j_ang_a_</a>);</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a> (2, 3) = x.dot (j_ang_b_);</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a> (0, 4) = x.dot (j_ang_c_);</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a> (1, 4) = x.dot (j_ang_d_);</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a> (2, 4) = x.dot (j_ang_e_);</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a> (0, 5) = x.dot (j_ang_f_);</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a> (1, 5) = x.dot (j_ang_g_);</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a> (2, 5) = x.dot (j_ang_h_);</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160; </div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  <span class="keywordflow">if</span> (compute_hessian)</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  {</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="comment">// Vectors from Equation 6.21 [Magnusson 2009]</span></div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    Eigen::Vector3d a, b, c, d, e, f;</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160; </div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    a &lt;&lt; 0, x.dot (<a class="code" href="classpcl_1_1_normal_distributions_transform.html#aa87d6f6163465d5952f385120819169b">h_ang_a2_</a>), x.dot (h_ang_a3_);</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    b &lt;&lt; 0, x.dot (h_ang_b2_), x.dot (h_ang_b3_);</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    c &lt;&lt; 0, x.dot (h_ang_c2_), x.dot (h_ang_c3_);</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    d &lt;&lt; x.dot (h_ang_d1_), x.dot (h_ang_d2_), x.dot (h_ang_d3_);</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    e &lt;&lt; x.dot (h_ang_e1_), x.dot (h_ang_e2_), x.dot (h_ang_e3_);</div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    f &lt;&lt; x.dot (h_ang_f1_), x.dot (h_ang_f2_), x.dot (h_ang_f3_);</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160; </div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    <span class="comment">// Calculate second derivative of Transformation Equation 6.17 w.r.t. transform vector p.</span></div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    <span class="comment">// Derivative w.r.t. ith and jth elements of transform vector corresponds to the 3x1 block matrix starting at (3i,j), Equation 6.20 and 6.21 [Magnusson 2009]</span></div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(9, 3) = a;</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(12, 3) = b;</div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(15, 3) = c;</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(9, 4) = b;</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(12, 4) = d;</div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(15, 4) = e;</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(9, 5) = c;</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(12, 5) = e;</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(15, 5) = f;</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;  }</div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a03884aff71b4d6263ea6b4a3346b87b1"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">pcl::NormalDistributionsTransform::point_gradient_</a></div><div class="ttdeci">Eigen::Matrix&lt; double, 3, 6 &gt; point_gradient_</div><div class="ttdoc">The first order derivative of the transformation of a point w.r.t. the transform vector,...</div><div class="ttdef"><b>Definition:</b> ndt.h:455</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_ad2250a36e3b63a879bac14df26272e4d"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">pcl::NormalDistributionsTransform::point_hessian_</a></div><div class="ttdeci">Eigen::Matrix&lt; double, 18, 6 &gt; point_hessian_</div><div class="ttdoc">The second order derivative of the transformation of a point w.r.t. the transform vector,...</div><div class="ttdef"><b>Definition:</b> ndt.h:458</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a92103be9ce6dc6838d13353358daa852"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a92103be9ce6dc6838d13353358daa852">&#9670;&nbsp;</a></span>computeStepLengthMT()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::computeStepLengthMT </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>step_dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>step_init</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>step_max</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>step_min</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>score</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>score_gradient</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 6 &gt; &amp;&#160;</td>
          <td class="paramname"><em>hessian</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;&#160;</td>
          <td class="paramname"><em>trans_cloud</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute line search step length and update transform and probability derivatives using More-Thuente method. </p>
<dl class="section note"><dt>注解</dt><dd>Search Algorithm [More, Thuente 1994] </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>initial transformation vector, <img class="formulaInl" alt="$ x $" src="form_22.png"/> in Equation 1.3 (Moore, Thuente 1994) and <img class="formulaInl" alt="$ \vec{p} $" src="form_23.png"/> in Algorithm 2 [Magnusson 2009] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">step_dir</td><td>descent direction, <img class="formulaInl" alt="$ p $" src="form_24.png"/> in Equation 1.3 (Moore, Thuente 1994) and <img class="formulaInl" alt="$ \delta \vec{p} $" src="form_25.png"/> normalized in Algorithm 2 [Magnusson 2009] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">step_init</td><td>initial step length estimate, <img class="formulaInl" alt="$ \alpha_0 $" src="form_26.png"/> in Moore-Thuente (1994) and the noramal of <img class="formulaInl" alt="$ \delta \vec{p} $" src="form_25.png"/> in Algorithm 2 [Magnusson 2009] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">step_max</td><td>maximum step length, <img class="formulaInl" alt="$ \alpha_max $" src="form_27.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">step_min</td><td>minimum step length, <img class="formulaInl" alt="$ \alpha_min $" src="form_28.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">score</td><td>final score function value, <img class="formulaInl" alt="$ f(x + \alpha p) $" src="form_29.png"/> in Equation 1.3 (Moore, Thuente 1994) and <img class="formulaInl" alt="$ score $" src="form_30.png"/> in Algorithm 2 [Magnusson 2009] </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">score_gradient</td><td>gradient of score function w.r.t. transformation vector, <img class="formulaInl" alt="$ f'(x + \alpha p) $" src="form_31.png"/> in Moore-Thuente (1994) and <img class="formulaInl" alt="$ \vec{g} $" src="form_32.png"/> in Algorithm 2 [Magnusson 2009] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">hessian</td><td>hessian of score function w.r.t. transformation vector, <img class="formulaInl" alt="$ f''(x + \alpha p) $" src="form_33.png"/> in Moore-Thuente (1994) and <img class="formulaInl" alt="$ H $" src="form_34.png"/> in Algorithm 2 [Magnusson 2009] </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">trans_cloud</td><td>transformed point cloud, <img class="formulaInl" alt="$ X $" src="form_35.png"/> transformed by <img class="formulaInl" alt="$ T(\vec{p},\vec{x}) $" src="form_36.png"/> in Algorithm 2 [Magnusson 2009] </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>final step length </dd></dl>
<div class="fragment"><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;{</div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;  <span class="comment">// Set the value of phi(0), Equation 1.3 [More, Thuente 1994]</span></div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;  <span class="keywordtype">double</span> phi_0 = -score;</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;  <span class="comment">// Set the value of phi&#39;(0), Equation 1.3 [More, Thuente 1994]</span></div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;  <span class="keywordtype">double</span> d_phi_0 = -(score_gradient.dot (step_dir));</div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160; </div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;  Eigen::Matrix&lt;double, 6, 1&gt;  x_t;</div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160; </div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;  <span class="keywordflow">if</span> (d_phi_0 &gt;= 0)</div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;  {</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;    <span class="comment">// Not a decent direction</span></div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    <span class="keywordflow">if</span> (d_phi_0 == 0)</div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;      <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    {</div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;      <span class="comment">// Reverse step direction and calculate optimal step.</span></div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;      d_phi_0 *= -1;</div>
<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;      step_dir *= -1;</div>
<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160; </div>
<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    }</div>
<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;  }</div>
<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160; </div>
<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;  <span class="comment">// The Search Algorithm for T(mu) [More, Thuente 1994]</span></div>
<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160; </div>
<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;  <span class="keywordtype">int</span> max_step_iterations = 10;</div>
<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;  <span class="keywordtype">int</span> step_iterations = 0;</div>
<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160; </div>
<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;  <span class="comment">// Sufficient decreace constant, Equation 1.1 [More, Thuete 1994]</span></div>
<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;  <span class="keywordtype">double</span> mu = 1.e-4;</div>
<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;  <span class="comment">// Curvature condition constant, Equation 1.2 [More, Thuete 1994]</span></div>
<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  <span class="keywordtype">double</span> nu = 0.9;</div>
<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160; </div>
<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;  <span class="comment">// Initial endpoints of Interval I,</span></div>
<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;  <span class="keywordtype">double</span> a_l = 0, a_u = 0;</div>
<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160; </div>
<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;  <span class="comment">// Auxiliary function psi is used until I is determined ot be a closed interval, Equation 2.1 [More, Thuente 1994]</span></div>
<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;  <span class="keywordtype">double</span> f_l = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a8fc05efdb729b163d4e3f175186b5e5a">auxilaryFunction_PsiMT</a> (a_l, phi_0, phi_0, d_phi_0, mu);</div>
<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;  <span class="keywordtype">double</span> g_l = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a93428f5aa08e84203bde53cd554c6794">auxilaryFunction_dPsiMT</a> (d_phi_0, d_phi_0, mu);</div>
<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160; </div>
<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;  <span class="keywordtype">double</span> f_u = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a8fc05efdb729b163d4e3f175186b5e5a">auxilaryFunction_PsiMT</a> (a_u, phi_0, phi_0, d_phi_0, mu);</div>
<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;  <span class="keywordtype">double</span> g_u = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a93428f5aa08e84203bde53cd554c6794">auxilaryFunction_dPsiMT</a> (d_phi_0, d_phi_0, mu);</div>
<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160; </div>
<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;  <span class="comment">// Check used to allow More-Thuente step length calculation to be skipped by making step_min == step_max</span></div>
<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;  <span class="keywordtype">bool</span> interval_converged = (step_max - step_min) &gt; 0, open_interval = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160; </div>
<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;  <span class="keywordtype">double</span> a_t = step_init;</div>
<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;  a_t = std::min (a_t, step_max);</div>
<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;  a_t = std::max (a_t, step_min);</div>
<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160; </div>
<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;  x_t = x + step_dir * a_t;</div>
<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160; </div>
<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;  <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a> = (Eigen::Translation&lt;float, 3&gt;(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (0)), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (1)), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (2))) *</div>
<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;                           Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (3)), Eigen::Vector3f::UnitX ()) *</div>
<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;                           Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (4)), Eigen::Vector3f::UnitY ()) *</div>
<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;                           Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (5)), Eigen::Vector3f::UnitZ ())).matrix ();</div>
<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160; </div>
<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;  <span class="comment">// New transformed point cloud</span></div>
<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;  <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">transformPointCloud</a> (*<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>, trans_cloud, <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a>);</div>
<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160; </div>
<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;  <span class="comment">// Updates score, gradient and hessian.  Hessian calculation is unessisary but testing showed that most step calculations use the</span></div>
<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;  <span class="comment">// initial step suggestion and recalculation the reusable portions of the hessian would intail more computation time.</span></div>
<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;  score = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a2eb79c026d9ec3bde70cf4b53377aa53">computeDerivatives</a> (score_gradient, hessian, trans_cloud, x_t, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160; </div>
<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;  <span class="comment">// Calculate phi(alpha_t)</span></div>
<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;  <span class="keywordtype">double</span> phi_t = -score;</div>
<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;  <span class="comment">// Calculate phi&#39;(alpha_t)</span></div>
<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;  <span class="keywordtype">double</span> d_phi_t = -(score_gradient.dot (step_dir));</div>
<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160; </div>
<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;  <span class="comment">// Calculate psi(alpha_t)</span></div>
<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;  <span class="keywordtype">double</span> psi_t = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a8fc05efdb729b163d4e3f175186b5e5a">auxilaryFunction_PsiMT</a> (a_t, phi_t, phi_0, d_phi_0, mu);</div>
<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;  <span class="comment">// Calculate psi&#39;(alpha_t)</span></div>
<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;  <span class="keywordtype">double</span> d_psi_t = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a93428f5aa08e84203bde53cd554c6794">auxilaryFunction_dPsiMT</a> (d_phi_t, d_phi_0, mu);</div>
<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160; </div>
<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;  <span class="comment">// Iterate until max number of iterations, interval convergance or a value satisfies the sufficient decrease, Equation 1.1, and curvature condition, Equation 1.2 [More, Thuente 1994]</span></div>
<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;  <span class="keywordflow">while</span> (!interval_converged &amp;&amp; step_iterations &lt; max_step_iterations &amp;&amp; !(psi_t &lt;= 0 <span class="comment">/*Sufficient Decrease*/</span> &amp;&amp; d_phi_t &lt;= -nu * d_phi_0 <span class="comment">/*Curvature Condition*/</span>))</div>
<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;  {</div>
<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    <span class="comment">// Use auxilary function if interval I is not closed</span></div>
<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    <span class="keywordflow">if</span> (open_interval)</div>
<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    {</div>
<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;      a_t = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a7ae4590ac0242cb320ea6f29e1b93ba6">trialValueSelectionMT</a> (a_l, f_l, g_l,</div>
<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;                                   a_u, f_u, g_u,</div>
<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;                                   a_t, psi_t, d_psi_t);</div>
<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    }</div>
<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    {</div>
<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;      a_t = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a7ae4590ac0242cb320ea6f29e1b93ba6">trialValueSelectionMT</a> (a_l, f_l, g_l,</div>
<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;                                   a_u, f_u, g_u,</div>
<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;                                   a_t, phi_t, d_phi_t);</div>
<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    }</div>
<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160; </div>
<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    a_t = std::min (a_t, step_max);</div>
<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    a_t = std::max (a_t, step_min);</div>
<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160; </div>
<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;    x_t = x + step_dir * a_t;</div>
<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160; </div>
<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;    <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a> = (Eigen::Translation&lt;float, 3&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (0)), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (1)), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (2))) *</div>
<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;                             Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (3)), Eigen::Vector3f::UnitX ()) *</div>
<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;                             Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (4)), Eigen::Vector3f::UnitY ()) *</div>
<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;                             Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (x_t (5)), Eigen::Vector3f::UnitZ ())).matrix ();</div>
<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160; </div>
<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <span class="comment">// New transformed point cloud</span></div>
<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="comment">// Done on final cloud to prevent wasted computation</span></div>
<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">transformPointCloud</a> (*<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>, trans_cloud, <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a>);</div>
<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160; </div>
<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    <span class="comment">// Updates score, gradient. Values stored to prevent wasted computation.</span></div>
<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;    score = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a2eb79c026d9ec3bde70cf4b53377aa53">computeDerivatives</a> (score_gradient, hessian, trans_cloud, x_t, <span class="keyword">false</span>);</div>
<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160; </div>
<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    <span class="comment">// Calculate phi(alpha_t+)</span></div>
<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    phi_t = -score;</div>
<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    <span class="comment">// Calculate phi&#39;(alpha_t+)</span></div>
<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    d_phi_t = -(score_gradient.dot (step_dir));</div>
<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160; </div>
<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    <span class="comment">// Calculate psi(alpha_t+)</span></div>
<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    psi_t = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a8fc05efdb729b163d4e3f175186b5e5a">auxilaryFunction_PsiMT</a> (a_t, phi_t, phi_0, d_phi_0, mu);</div>
<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;    <span class="comment">// Calculate psi&#39;(alpha_t+)</span></div>
<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    d_psi_t = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a93428f5aa08e84203bde53cd554c6794">auxilaryFunction_dPsiMT</a> (d_phi_t, d_phi_0, mu);</div>
<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160; </div>
<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;    <span class="comment">// Check if I is now a closed interval</span></div>
<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;    <span class="keywordflow">if</span> (open_interval &amp;&amp; (psi_t &lt;= 0 &amp;&amp; d_psi_t &gt;= 0))</div>
<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    {</div>
<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;      open_interval = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160; </div>
<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;      <span class="comment">// Converts f_l and g_l from psi to phi</span></div>
<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;      f_l = f_l + phi_0 - mu * d_phi_0 * a_l;</div>
<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;      g_l = g_l + mu * d_phi_0;</div>
<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160; </div>
<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;      <span class="comment">// Converts f_u and g_u from psi to phi</span></div>
<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;      f_u = f_u + phi_0 - mu * d_phi_0 * a_u;</div>
<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;      g_u = g_u + mu * d_phi_0;</div>
<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    }</div>
<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160; </div>
<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    <span class="keywordflow">if</span> (open_interval)</div>
<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    {</div>
<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;      <span class="comment">// Update interval end points using Updating Algorithm [More, Thuente 1994]</span></div>
<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;      interval_converged = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#acef200272607a40dc9890481f11c2480">updateIntervalMT</a> (a_l, f_l, g_l,</div>
<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;                                             a_u, f_u, g_u,</div>
<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;                                             a_t, psi_t, d_psi_t);</div>
<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    }</div>
<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    {</div>
<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;      <span class="comment">// Update interval end points using Modified Updating Algorithm [More, Thuente 1994]</span></div>
<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;      interval_converged = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#acef200272607a40dc9890481f11c2480">updateIntervalMT</a> (a_l, f_l, g_l,</div>
<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;                                             a_u, f_u, g_u,</div>
<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;                                             a_t, phi_t, d_phi_t);</div>
<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;    }</div>
<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160; </div>
<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    step_iterations++;</div>
<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;  }</div>
<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160; </div>
<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;  <span class="comment">// If inner loop was run then hessian needs to be calculated.</span></div>
<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;  <span class="comment">// Hessian is unnessisary for step length determination but gradients are required</span></div>
<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;  <span class="comment">// so derivative and transform data is stored for the next iteration.</span></div>
<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;  <span class="keywordflow">if</span> (step_iterations)</div>
<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a12a31cfee6372534d795c1f65fbfbd2d">computeHessian</a> (hessian, trans_cloud, x_t);</div>
<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160; </div>
<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;  <span class="keywordflow">return</span> (a_t);</div>
<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a12a31cfee6372534d795c1f65fbfbd2d"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a12a31cfee6372534d795c1f65fbfbd2d">pcl::NormalDistributionsTransform::computeHessian</a></div><div class="ttdeci">void computeHessian(Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, PointCloudSource &amp;trans_cloud, Eigen::Matrix&lt; double, 6, 1 &gt; &amp;p)</div><div class="ttdoc">Compute hessian of probability function w.r.t. the transformation vector.</div><div class="ttdef"><b>Definition:</b> ndt.hpp:397</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a2eb79c026d9ec3bde70cf4b53377aa53"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a2eb79c026d9ec3bde70cf4b53377aa53">pcl::NormalDistributionsTransform::computeDerivatives</a></div><div class="ttdeci">double computeDerivatives(Eigen::Matrix&lt; double, 6, 1 &gt; &amp;score_gradient, Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, PointCloudSource &amp;trans_cloud, Eigen::Matrix&lt; double, 6, 1 &gt; &amp;p, bool compute_hessian=true)</div><div class="ttdoc">Compute derivatives of probability function w.r.t. the transformation vector.</div><div class="ttdef"><b>Definition:</b> ndt.hpp:176</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a7ae4590ac0242cb320ea6f29e1b93ba6"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a7ae4590ac0242cb320ea6f29e1b93ba6">pcl::NormalDistributionsTransform::trialValueSelectionMT</a></div><div class="ttdeci">double trialValueSelectionMT(double a_l, double f_l, double g_l, double a_u, double f_u, double g_u, double a_t, double f_t, double g_t)</div><div class="ttdoc">Select new trial value for More-Thuente method.</div><div class="ttdef"><b>Definition:</b> ndt.hpp:521</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a8fc05efdb729b163d4e3f175186b5e5a"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a8fc05efdb729b163d4e3f175186b5e5a">pcl::NormalDistributionsTransform::auxilaryFunction_PsiMT</a></div><div class="ttdeci">double auxilaryFunction_PsiMT(double a, double f_a, double f_0, double g_0, double mu=1.e-4)</div><div class="ttdoc">Auxilary function used to determin endpoints of More-Thuente interval.</div><div class="ttdef"><b>Definition:</b> ndt.h:399</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a93428f5aa08e84203bde53cd554c6794"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a93428f5aa08e84203bde53cd554c6794">pcl::NormalDistributionsTransform::auxilaryFunction_dPsiMT</a></div><div class="ttdeci">double auxilaryFunction_dPsiMT(double g_a, double g_0, double mu=1.e-4)</div><div class="ttdoc">Auxilary function derivative used to determin endpoints of More-Thuente interval.</div><div class="ttdef"><b>Definition:</b> ndt.h:412</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_acef200272607a40dc9890481f11c2480"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#acef200272607a40dc9890481f11c2480">pcl::NormalDistributionsTransform::updateIntervalMT</a></div><div class="ttdeci">bool updateIntervalMT(double &amp;a_l, double &amp;f_l, double &amp;g_l, double &amp;a_u, double &amp;f_u, double &amp;g_u, double a_t, double f_t, double g_t)</div><div class="ttdoc">Update interval of possible step lengths for More-Thuente method,  in More-Thuente (1994)</div><div class="ttdef"><b>Definition:</b> ndt.hpp:480</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a023e79a041ee70e8383654432cf5a71e"><div class="ttname"><a href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">pcl::Registration::final_transformation_</a></div><div class="ttdeci">Matrix4 final_transformation_</div><div class="ttdoc">The final transformation matrix estimated by the registration method after N iterations.</div><div class="ttdef"><b>Definition:</b> registration.h:505</div></div>
<div class="ttc" id="agroup__common_html_ga52d532f7f2b4d7bba78d13701d3a33d8"><div class="ttname"><a href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">pcl::transformPointCloud</a></div><div class="ttdeci">void transformPointCloud(const pcl::PointCloud&lt; PointT &gt; &amp;cloud_in, pcl::PointCloud&lt; PointT &gt; &amp;cloud_out, const Eigen::Transform&lt; Scalar, 3, Eigen::Affine &gt; &amp;transform, bool copy_all_fields=true)</div><div class="ttdoc">Apply an affine transform defined by an Eigen Transform</div><div class="ttdef"><b>Definition:</b> transforms.hpp:42</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a60ae727dd5185e7fc804b4d8de973a85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a60ae727dd5185e7fc804b4d8de973a85">&#9670;&nbsp;</a></span>computeTransformation() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::computeTransformation </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Estimate the transformation and returns the transformed source (input) as output. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resultant input transfomed point cloud dataset </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;      {</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a60ae727dd5185e7fc804b4d8de973a85">computeTransformation</a> (output, Eigen::Matrix4f::Identity ());</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a60ae727dd5185e7fc804b4d8de973a85"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a60ae727dd5185e7fc804b4d8de973a85">pcl::NormalDistributionsTransform::computeTransformation</a></div><div class="ttdeci">virtual void computeTransformation(PointCloudSource &amp;output)</div><div class="ttdoc">Estimate the transformation and returns the transformed source (input) as output.</div><div class="ttdef"><b>Definition:</b> ndt.h:238</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a4abd14dda61865b6063868c3f3fc8845"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4abd14dda61865b6063868c3f3fc8845">&#9670;&nbsp;</a></span>computeTransformation() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::computeTransformation </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1_point_cloud.html">PointCloudSource</a> &amp;&#160;</td>
          <td class="paramname"><em>output</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Matrix4f &amp;&#160;</td>
          <td class="paramname"><em>guess</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Estimate the transformation and returns the transformed source (input) as output. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">output</td><td>the resultant input transfomed point cloud dataset </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">guess</td><td>the initial gross estimation of the transformation </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;{</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  <a class="code" href="classpcl_1_1_registration.html#a6957c3193d73098cb0535d6625d591d4">nr_iterations_</a> = 0;</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <a class="code" href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">converged_</a> = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="keywordtype">double</span> gauss_c1, gauss_c2, gauss_d3;</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  <span class="comment">// Initializes the guassian fitting parameters (eq. 6.8) [Magnusson 2009]</span></div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  gauss_c1 = 10 * (1 - <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a779d3b4c4f5181eb4f5ed6a660c66471">outlier_ratio_</a>);</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  gauss_c2 = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a779d3b4c4f5181eb4f5ed6a660c66471">outlier_ratio_</a> / pow (<a class="code" href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">resolution_</a>, 3);</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  gauss_d3 = -log (gauss_c2);</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a7b014c047dcf7fb8d5285e1cffeb125c">gauss_d1_</a> = -log ( gauss_c1 + gauss_c2 ) - gauss_d3;</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  gauss_d2_ = -2 * log ((-log ( gauss_c1 * exp ( -0.5 ) + gauss_c2 ) - gauss_d3) / <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a7b014c047dcf7fb8d5285e1cffeb125c">gauss_d1_</a>);</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <span class="keywordflow">if</span> (guess != Eigen::Matrix4f::Identity ())</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  {</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    <span class="comment">// Initialise final transformation to the guessed one</span></div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a> = guess;</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="comment">// Apply guessed transformation prior to search for neighbours</span></div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <a class="code" href="group__common.html#ga52d532f7f2b4d7bba78d13701d3a33d8">transformPointCloud</a> (output, output, guess);</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  }</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="comment">// Initialize Point Gradient and Hessian</span></div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a>.setZero ();</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a>.block&lt;3, 3&gt;(0, 0).<a class="code" href="apps_2point__cloud__editor_2include_2pcl_2apps_2point__cloud__editor_2common_8h.html#ac51554cebbaae5040fd5bd3a55d1e6fe">setIdentity</a> ();</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.setZero ();</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  Eigen::Transform&lt;float, 3, Eigen::Affine, Eigen::ColMajor&gt; eig_transformation;</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  eig_transformation.matrix () = <a class="code" href="classpcl_1_1_registration.html#a023e79a041ee70e8383654432cf5a71e">final_transformation_</a>;</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  <span class="comment">// Convert initial guess matrix to 6 element transformation vector</span></div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  Eigen::Matrix&lt;double, 6, 1&gt; p, delta_p, score_gradient;</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  Eigen::Vector3f init_translation = eig_transformation.translation ();</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  Eigen::Vector3f init_rotation = eig_transformation.rotation ().eulerAngles (0, 1, 2);</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  p &lt;&lt; init_translation (0), init_translation (1), init_translation (2),</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  init_rotation (0), init_rotation (1), init_rotation (2);</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  Eigen::Matrix&lt;double, 6, 6&gt; hessian;</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  <span class="keywordtype">double</span> score = 0;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  <span class="keywordtype">double</span> delta_p_norm;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="comment">// Calculate derivates of initial transform vector, subsequent derivative calculations are done in the step length determination.</span></div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  score = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a2eb79c026d9ec3bde70cf4b53377aa53">computeDerivatives</a> (score_gradient, hessian, output, p);</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <span class="keywordflow">while</span> (!<a class="code" href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">converged_</a>)</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  {</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="comment">// Store previous transformation</span></div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <a class="code" href="classpcl_1_1_registration.html#a8d0064ba2f733ef07476f42de09a656f">previous_transformation_</a> = <a class="code" href="classpcl_1_1_registration.html#a2cdeaab1c7d5e156a7bd35ee71c1f0db">transformation_</a>;</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="comment">// Solve for decent direction using newton method, line 23 in Algorithm 2 [Magnusson 2009]</span></div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    Eigen::JacobiSVD&lt;Eigen::Matrix&lt;double, 6, 6&gt; &gt; sv (hessian, Eigen::ComputeFullU | Eigen::ComputeFullV);</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="comment">// Negative for maximization as opposed to minimization</span></div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    delta_p = sv.solve (-score_gradient);</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="comment">//Calculate step length with guarnteed sufficient decrease [More, Thuente 1994]</span></div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    delta_p_norm = delta_p.norm ();</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="keywordflow">if</span> (delta_p_norm == 0 || delta_p_norm != delta_p_norm)</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    {</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;      <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a0ce7df093334bfbfba42233e15b3fede">trans_probability_</a> = score / <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points.size ());</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;      <a class="code" href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">converged_</a> = delta_p_norm == delta_p_norm;</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;      <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    }</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    delta_p.normalize ();</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    delta_p_norm = <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a92103be9ce6dc6838d13353358daa852">computeStepLengthMT</a> (p, delta_p, delta_p_norm, <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a15165f7e13bbfbc6a2e5e54bc8ed5c28">step_size_</a>, <a class="code" href="classpcl_1_1_registration.html#adbd6519634f433c0be2fd640c0c75108">transformation_epsilon_</a> / 2, score, score_gradient, hessian, output);</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    delta_p *= delta_p_norm;</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160; </div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160; </div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    <a class="code" href="classpcl_1_1_registration.html#a2cdeaab1c7d5e156a7bd35ee71c1f0db">transformation_</a> = (Eigen::Translation&lt;float, 3&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (delta_p (0)), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (delta_p (1)), <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (delta_p (2))) *</div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                       Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (delta_p (3)), Eigen::Vector3f::UnitX ()) *</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;                       Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (delta_p (4)), Eigen::Vector3f::UnitY ()) *</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                       Eigen::AngleAxis&lt;float&gt; (<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span> (delta_p (5)), Eigen::Vector3f::UnitZ ())).matrix ();</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160; </div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    p = p + delta_p;</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="comment">// Update Visualizer (untested)</span></div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_registration.html#a010905bbc1bc67175d3ecf3b2ea6401a">update_visualizer_</a> != 0)</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;      <a class="code" href="classpcl_1_1_registration.html#a010905bbc1bc67175d3ecf3b2ea6401a">update_visualizer_</a> (output, std::vector&lt;int&gt;(), *<a class="code" href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">target_</a>, std::vector&lt;int&gt;() );</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_registration.html#a6957c3193d73098cb0535d6625d591d4">nr_iterations_</a> &gt; <a class="code" href="classpcl_1_1_registration.html#aa776d097d20137f2702a275d931989d2">max_iterations_</a> ||</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        (<a class="code" href="classpcl_1_1_registration.html#a6957c3193d73098cb0535d6625d591d4">nr_iterations_</a> &amp;&amp; (std::fabs (delta_p_norm) &lt; <a class="code" href="classpcl_1_1_registration.html#adbd6519634f433c0be2fd640c0c75108">transformation_epsilon_</a>)))</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    {</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      <a class="code" href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">converged_</a> = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    }</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <a class="code" href="classpcl_1_1_registration.html#a6957c3193d73098cb0535d6625d591d4">nr_iterations_</a>++;</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160; </div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  }</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  <span class="comment">// Store transformation probability.  The realtive differences within each scan registration are accurate</span></div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  <span class="comment">// but the normalization constants need to be modified for it to be globally accurate</span></div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a0ce7df093334bfbfba42233e15b3fede">trans_probability_</a> = score / <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>-&gt;points.size ());</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;}</div>
<div class="ttc" id="aapps_2point__cloud__editor_2include_2pcl_2apps_2point__cloud__editor_2common_8h_html_ac51554cebbaae5040fd5bd3a55d1e6fe"><div class="ttname"><a href="apps_2point__cloud__editor_2include_2pcl_2apps_2point__cloud__editor_2common_8h.html#ac51554cebbaae5040fd5bd3a55d1e6fe">setIdentity</a></div><div class="ttdeci">void setIdentity(float *matrix)</div><div class="ttdoc">Sets an array representing a 4x4 matrix to the identity</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a0ce7df093334bfbfba42233e15b3fede"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a0ce7df093334bfbfba42233e15b3fede">pcl::NormalDistributionsTransform::trans_probability_</a></div><div class="ttdeci">double trans_probability_</div><div class="ttdoc">The probability score of the transform applied to the input cloud, Equation 6.9 and 6....</div><div class="ttdef"><b>Definition:</b> ndt.h:435</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a15165f7e13bbfbc6a2e5e54bc8ed5c28"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a15165f7e13bbfbc6a2e5e54bc8ed5c28">pcl::NormalDistributionsTransform::step_size_</a></div><div class="ttdeci">double step_size_</div><div class="ttdoc">The maximum step length.</div><div class="ttdef"><b>Definition:</b> ndt.h:426</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a779d3b4c4f5181eb4f5ed6a660c66471"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a779d3b4c4f5181eb4f5ed6a660c66471">pcl::NormalDistributionsTransform::outlier_ratio_</a></div><div class="ttdeci">double outlier_ratio_</div><div class="ttdoc">The ratio of outliers of points w.r.t. a normal distribution, Equation 6.7 [Magnusson 2009].</div><div class="ttdef"><b>Definition:</b> ndt.h:429</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a7b014c047dcf7fb8d5285e1cffeb125c"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a7b014c047dcf7fb8d5285e1cffeb125c">pcl::NormalDistributionsTransform::gauss_d1_</a></div><div class="ttdeci">double gauss_d1_</div><div class="ttdoc">The normalization constants used fit the point distribution to a normal distribution,...</div><div class="ttdef"><b>Definition:</b> ndt.h:432</div></div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a92103be9ce6dc6838d13353358daa852"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a92103be9ce6dc6838d13353358daa852">pcl::NormalDistributionsTransform::computeStepLengthMT</a></div><div class="ttdeci">double computeStepLengthMT(const Eigen::Matrix&lt; double, 6, 1 &gt; &amp;x, Eigen::Matrix&lt; double, 6, 1 &gt; &amp;step_dir, double step_init, double step_max, double step_min, double &amp;score, Eigen::Matrix&lt; double, 6, 1 &gt; &amp;score_gradient, Eigen::Matrix&lt; double, 6, 6 &gt; &amp;hessian, PointCloudSource &amp;trans_cloud)</div><div class="ttdoc">Compute line search step length and update transform and probability derivatives using More-Thuente m...</div><div class="ttdef"><b>Definition:</b> ndt.hpp:604</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a010905bbc1bc67175d3ecf3b2ea6401a"><div class="ttname"><a href="classpcl_1_1_registration.html#a010905bbc1bc67175d3ecf3b2ea6401a">pcl::Registration::update_visualizer_</a></div><div class="ttdeci">boost::function&lt; void(const pcl::PointCloud&lt; PointSource &gt; &amp;cloud_src, const std::vector&lt; int &gt; &amp;indices_src, const pcl::PointCloud&lt; PointTarget &gt; &amp;cloud_tgt, const std::vector&lt; int &gt; &amp;indices_tgt)&gt; update_visualizer_</div><div class="ttdoc">Callback function to update intermediate source point cloud position during it's registration to the ...</div><div class="ttdef"><b>Definition:</b> registration.h:577</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a2cdeaab1c7d5e156a7bd35ee71c1f0db"><div class="ttname"><a href="classpcl_1_1_registration.html#a2cdeaab1c7d5e156a7bd35ee71c1f0db">pcl::Registration::transformation_</a></div><div class="ttdeci">Matrix4 transformation_</div><div class="ttdoc">The transformation matrix estimated by the registration method.</div><div class="ttdef"><b>Definition:</b> registration.h:508</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a6957c3193d73098cb0535d6625d591d4"><div class="ttname"><a href="classpcl_1_1_registration.html#a6957c3193d73098cb0535d6625d591d4">pcl::Registration::nr_iterations_</a></div><div class="ttdeci">int nr_iterations_</div><div class="ttdoc">The number of iterations the internal optimization ran for (used internally).</div><div class="ttdef"><b>Definition:</b> registration.h:491</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a8d0064ba2f733ef07476f42de09a656f"><div class="ttname"><a href="classpcl_1_1_registration.html#a8d0064ba2f733ef07476f42de09a656f">pcl::Registration::previous_transformation_</a></div><div class="ttdeci">Matrix4 previous_transformation_</div><div class="ttdoc">The previous transformation matrix estimated by the registration method (used internally).</div><div class="ttdef"><b>Definition:</b> registration.h:511</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a8e94793b677e107410ebb29ea2f931e9"><div class="ttname"><a href="classpcl_1_1_registration.html#a8e94793b677e107410ebb29ea2f931e9">pcl::Registration::converged_</a></div><div class="ttdeci">bool converged_</div><div class="ttdoc">Holds internal convergence state, given user parameters.</div><div class="ttdef"><b>Definition:</b> registration.h:536</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_aa776d097d20137f2702a275d931989d2"><div class="ttname"><a href="classpcl_1_1_registration.html#aa776d097d20137f2702a275d931989d2">pcl::Registration::max_iterations_</a></div><div class="ttdeci">int max_iterations_</div><div class="ttdoc">The maximum number of iterations the internal optimization should run for. The default value is 10.</div><div class="ttdef"><b>Definition:</b> registration.h:496</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_adbd6519634f433c0be2fd640c0c75108"><div class="ttname"><a href="classpcl_1_1_registration.html#adbd6519634f433c0be2fd640c0c75108">pcl::Registration::transformation_epsilon_</a></div><div class="ttdeci">double transformation_epsilon_</div><div class="ttdoc">The maximum difference between two consecutive transformations in order to consider convergence (user...</div><div class="ttdef"><b>Definition:</b> registration.h:516</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_af9ac08a379a3b5db44c5c502cf6a882e"><div class="ttname"><a href="classpcl_1_1_registration.html#af9ac08a379a3b5db44c5c502cf6a882e">pcl::Registration::target_</a></div><div class="ttdeci">PointCloudTargetConstPtr target_</div><div class="ttdoc">The input point cloud dataset target.</div><div class="ttdef"><b>Definition:</b> registration.h:502</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a60ca3541f15f9ffb2b0b0bc43b9d3d69"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a60ca3541f15f9ffb2b0b0bc43b9d3d69">&#9670;&nbsp;</a></span>convertTransform() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::convertTransform </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Affine3f &amp;&#160;</td>
          <td class="paramname"><em>trans</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Convert 6 element transformation vector to affine transformation. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>transformation vector of the form [x, y, z, roll, pitch, yaw] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">trans</td><td>affine transform corresponding to given transfomation vector </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;      {</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        trans = Eigen::Translation&lt;float, 3&gt;(<span class="keywordtype">float</span> (x (0)), <span class="keywordtype">float</span> (x (1)), <span class="keywordtype">float</span> (x (2))) *</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                Eigen::AngleAxis&lt;float&gt;(<span class="keywordtype">float</span> (x (3)), Eigen::Vector3f::UnitX ()) *</div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;                Eigen::AngleAxis&lt;float&gt;(<span class="keywordtype">float</span> (x (4)), Eigen::Vector3f::UnitY ()) *</div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;                Eigen::AngleAxis&lt;float&gt;(<span class="keywordtype">float</span> (x (5)), Eigen::Vector3f::UnitZ ());</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a6cd487fcf59a975ca9b898a56a429a5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6cd487fcf59a975ca9b898a56a429a5f">&#9670;&nbsp;</a></span>convertTransform() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::convertTransform </td>
          <td>(</td>
          <td class="paramtype">const Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>x</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix4f &amp;&#160;</td>
          <td class="paramname"><em>trans</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Convert 6 element transformation vector to transformation matrix. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>transformation vector of the form [x, y, z, roll, pitch, yaw] </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">trans</td><td>4x4 transformation matrix corresponding to given transfomation vector </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;      {</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        Eigen::Affine3f _affine;</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;        <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a60ca3541f15f9ffb2b0b0bc43b9d3d69">convertTransform</a> (x, _affine);</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        trans = _affine.matrix ();</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_a60ca3541f15f9ffb2b0b0bc43b9d3d69"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#a60ca3541f15f9ffb2b0b0bc43b9d3d69">pcl::NormalDistributionsTransform::convertTransform</a></div><div class="ttdeci">static void convertTransform(const Eigen::Matrix&lt; double, 6, 1 &gt; &amp;x, Eigen::Affine3f &amp;trans)</div><div class="ttdoc">Convert 6 element transformation vector to affine transformation.</div><div class="ttdef"><b>Definition:</b> ndt.h:195</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a62b635e6111fa3e0a756cebadcc6f78b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62b635e6111fa3e0a756cebadcc6f78b">&#9670;&nbsp;</a></span>getFinalNumIteration()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::getFinalNumIteration </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the number of iterations required to calculate alignment. </p>
<dl class="section return"><dt>返回</dt><dd>final number of iterations </dd></dl>
<div class="fragment"><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      {</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1_registration.html#a6957c3193d73098cb0535d6625d591d4">nr_iterations_</a>);</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="aedf43d53d08c848cab4ad95d8380bd1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aedf43d53d08c848cab4ad95d8380bd1f">&#9670;&nbsp;</a></span>getOulierRatio()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::getOulierRatio </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the point cloud outlier ratio. </p>
<dl class="section return"><dt>返回</dt><dd>outlier ratio </dd></dl>
<div class="fragment"><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      {</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1_normal_distributions_transform.html#a779d3b4c4f5181eb4f5ed6a660c66471">outlier_ratio_</a>);</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a23d792fcdc2d052ed08571f5537e21a5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23d792fcdc2d052ed08571f5537e21a5">&#9670;&nbsp;</a></span>getResolution()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">float <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::getResolution </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get voxel grid resolution. </p>
<dl class="section return"><dt>返回</dt><dd>side length of voxels </dd></dl>
<div class="fragment"><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;      {</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">resolution_</a>);</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a5b009e0b8e2ae8e5c1c97e6a66494b45"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b009e0b8e2ae8e5c1c97e6a66494b45">&#9670;&nbsp;</a></span>getStepSize()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::getStepSize </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the newton line search maximum step length. </p>
<dl class="section return"><dt>返回</dt><dd>maximum step length </dd></dl>
<div class="fragment"><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      {</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1_normal_distributions_transform.html#a15165f7e13bbfbc6a2e5e54bc8ed5c28">step_size_</a>);</div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a5ce68689eb10fe61b9e6427ba143cbf1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ce68689eb10fe61b9e6427ba143cbf1">&#9670;&nbsp;</a></span>getTransformationProbability()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::getTransformationProbability </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the registration alignment probability. </p>
<dl class="section return"><dt>返回</dt><dd>transformation probability </dd></dl>
<div class="fragment"><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;      {</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="classpcl_1_1_normal_distributions_transform.html#a0ce7df093334bfbfba42233e15b3fede">trans_probability_</a>);</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="abc9909b2197aaa297edcffe1a0a2b1ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abc9909b2197aaa297edcffe1a0a2b1ae">&#9670;&nbsp;</a></span>setInputTarget()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::setInputTarget </td>
          <td>(</td>
          <td class="paramtype">const PointCloudTargetConstPtr &amp;&#160;</td>
          <td class="paramname"><em>cloud</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Provide a pointer to the input target (e.g., the point cloud that we want to align the input source to). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>the input point cloud target </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;      {</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <a class="code" href="classpcl_1_1_registration.html#a4c4e69008295052913c76175797b99a9">Registration&lt;PointSource, PointTarget&gt;::setInputTarget</a> (cloud);</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        <a class="code" href="classpcl_1_1_normal_distributions_transform.html#abd92aa13bd087dafada2010c413905b7">init</a> ();</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;      }</div>
<div class="ttc" id="aclasspcl_1_1_normal_distributions_transform_html_abd92aa13bd087dafada2010c413905b7"><div class="ttname"><a href="classpcl_1_1_normal_distributions_transform.html#abd92aa13bd087dafada2010c413905b7">pcl::NormalDistributionsTransform::init</a></div><div class="ttdeci">void init()</div><div class="ttdoc">Initiate covariance voxel structure.</div><div class="ttdef"><b>Definition:</b> ndt.h:252</div></div>
<div class="ttc" id="aclasspcl_1_1_registration_html_a4c4e69008295052913c76175797b99a9"><div class="ttname"><a href="classpcl_1_1_registration.html#a4c4e69008295052913c76175797b99a9">pcl::Registration::setInputTarget</a></div><div class="ttdeci">virtual void setInputTarget(const PointCloudTargetConstPtr &amp;cloud)</div><div class="ttdoc">Provide a pointer to the input target (e.g., the point cloud that we want to align the input source t...</div><div class="ttdef"><b>Definition:</b> registration.hpp:58</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="acb58f7261434f0670d2063cb6396b03c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb58f7261434f0670d2063cb6396b03c">&#9670;&nbsp;</a></span>setOulierRatio()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::setOulierRatio </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>outlier_ratio</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set/change the point cloud outlier ratio. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">outlier_ratio</td><td>outlier ratio </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;      {</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a779d3b4c4f5181eb4f5ed6a660c66471">outlier_ratio_</a> = outlier_ratio;</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a4b1282cd7399d47b02f210f47a47ccaa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b1282cd7399d47b02f210f47a47ccaa">&#9670;&nbsp;</a></span>setResolution()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::setResolution </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>resolution</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set/change the voxel grid resolution. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">resolution</td><td>side length of voxels </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;      {</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        <span class="comment">// Prevents unnessary voxel initiations</span></div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">resolution_</a> != resolution)</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        {</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;          <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a979b1ab50b52b130e0b29fda50e0afb0">resolution_</a> = resolution;</div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;          <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1_p_c_l_base.html#a09c70d8e06e3fb4f07903fe6f8d67869">input_</a>)</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;            <a class="code" href="classpcl_1_1_normal_distributions_transform.html#abd92aa13bd087dafada2010c413905b7">init</a> ();</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        }</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="af6e7b6e4d7129bb12d65477a56d99d99"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6e7b6e4d7129bb12d65477a56d99d99">&#9670;&nbsp;</a></span>setStepSize()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::setStepSize </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>step_size</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set/change the newton line search maximum step length. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">step_size</td><td>maximum step length </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;      {</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a15165f7e13bbfbc6a2e5e54bc8ed5c28">step_size_</a> = step_size;</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;      }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a7ae4590ac0242cb320ea6f29e1b93ba6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ae4590ac0242cb320ea6f29e1b93ba6">&#9670;&nbsp;</a></span>trialValueSelectionMT()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::trialValueSelectionMT </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>a_l</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>f_l</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>g_l</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>a_u</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>f_u</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>g_u</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>a_t</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>f_t</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>g_t</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Select new trial value for More-Thuente method. </p>
<dl class="section note"><dt>注解</dt><dd>Trial Value <a class="el" href="class_selection.html" title="This class serves as a sort of mask for performing operations on a point cloud. It keeps track of the...">Selection</a> [More, Thuente 1994], <img class="formulaInl" alt="$ \psi(\alpha_k) $" src="form_61.png"/> is used for <img class="formulaInl" alt="$ f_k $" src="form_62.png"/> and <img class="formulaInl" alt="$ g_k $" src="form_63.png"/> until some value satifies the test <img class="formulaInl" alt="$ \psi(\alpha_k) \leq 0 $" src="form_38.png"/> and <img class="formulaInl" alt="$ \phi'(\alpha_k) \geq 0 $" src="form_39.png"/> then <img class="formulaInl" alt="$ \phi(\alpha_k) $" src="form_64.png"/> is used from then on. </dd>
<dd>
Interpolation Minimizer equations from Optimization Theory and Methods: Nonlinear Programming By Wenyu Sun, Ya-xiang Yuan (89-100). </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">a_l</td><td>first endpoint of interval <img class="formulaInl" alt="$ I $" src="form_37.png"/>, <img class="formulaInl" alt="$ \alpha_l $" src="form_40.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">f_l</td><td>value at first endpoint, <img class="formulaInl" alt="$ f_l $" src="form_41.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">g_l</td><td>derivative at first endpoint, <img class="formulaInl" alt="$ g_l $" src="form_44.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">a_u</td><td>second endpoint of interval <img class="formulaInl" alt="$ I $" src="form_37.png"/>, <img class="formulaInl" alt="$ \alpha_u $" src="form_47.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">f_u</td><td>value at second endpoint, <img class="formulaInl" alt="$ f_u $" src="form_48.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">g_u</td><td>derivative at second endpoint, <img class="formulaInl" alt="$ g_u $" src="form_51.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">a_t</td><td>previous trial value, <img class="formulaInl" alt="$ \alpha_t $" src="form_54.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">f_t</td><td>value at previous trial value, <img class="formulaInl" alt="$ f_t $" src="form_55.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">g_t</td><td>derivative at previous trial value, <img class="formulaInl" alt="$ g_t $" src="form_58.png"/> in Moore-Thuente (1994) </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>new trial value </dd></dl>
<div class="fragment"><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;{</div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;  <span class="comment">// Case 1 in Trial Value Selection [More, Thuente 1994]</span></div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;  <span class="keywordflow">if</span> (f_t &gt; f_l)</div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;  {</div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="comment">// Calculate the minimizer of the cubic that interpolates f_l, f_t, g_l and g_t</span></div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    <span class="comment">// Equation 2.4.52 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="keywordtype">double</span> z = 3 * (f_t - f_l) / (a_t - a_l) - g_t - g_l;</div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    <span class="keywordtype">double</span> w = std::sqrt (z * z - g_t * g_l);</div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    <span class="comment">// Equation 2.4.56 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="keywordtype">double</span> a_c = a_l + (a_t - a_l) * (w - g_l - z) / (g_t - g_l + 2 * w);</div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160; </div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <span class="comment">// Calculate the minimizer of the quadratic that interpolates f_l, f_t and g_l</span></div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <span class="comment">// Equation 2.4.2 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    <span class="keywordtype">double</span> a_q = a_l - 0.5 * (a_l - a_t) * g_l / (g_l - (f_l - f_t) / (a_l - a_t));</div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160; </div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    <span class="keywordflow">if</span> (std::fabs (a_c - a_l) &lt; std::fabs (a_q - a_l))</div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;      <span class="keywordflow">return</span> (a_c);</div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;      <span class="keywordflow">return</span> (0.5 * (a_q + a_c));</div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;  }</div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;  <span class="comment">// Case 2 in Trial Value Selection [More, Thuente 1994]</span></div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;  <span class="keywordflow">if</span> (g_t * g_l &lt; 0)</div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;  {</div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    <span class="comment">// Calculate the minimizer of the cubic that interpolates f_l, f_t, g_l and g_t</span></div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    <span class="comment">// Equation 2.4.52 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    <span class="keywordtype">double</span> z = 3 * (f_t - f_l) / (a_t - a_l) - g_t - g_l;</div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    <span class="keywordtype">double</span> w = std::sqrt (z * z - g_t * g_l);</div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <span class="comment">// Equation 2.4.56 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    <span class="keywordtype">double</span> a_c = a_l + (a_t - a_l) * (w - g_l - z) / (g_t - g_l + 2 * w);</div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160; </div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <span class="comment">// Calculate the minimizer of the quadratic that interpolates f_l, g_l and g_t</span></div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <span class="comment">// Equation 2.4.5 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    <span class="keywordtype">double</span> a_s = a_l - (a_l - a_t) / (g_l - g_t) * g_l;</div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160; </div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    <span class="keywordflow">if</span> (std::fabs (a_c - a_t) &gt;= std::fabs (a_s - a_t))</div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;      <span class="keywordflow">return</span> (a_c);</div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;      <span class="keywordflow">return</span> (a_s);</div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  }</div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  <span class="comment">// Case 3 in Trial Value Selection [More, Thuente 1994]</span></div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  <span class="keywordflow">if</span> (std::fabs (g_t) &lt;= std::fabs (g_l))</div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  {</div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    <span class="comment">// Calculate the minimizer of the cubic that interpolates f_l, f_t, g_l and g_t</span></div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="comment">// Equation 2.4.52 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="keywordtype">double</span> z = 3 * (f_t - f_l) / (a_t - a_l) - g_t - g_l;</div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="keywordtype">double</span> w = std::sqrt (z * z - g_t * g_l);</div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="keywordtype">double</span> a_c = a_l + (a_t - a_l) * (w - g_l - z) / (g_t - g_l + 2 * w);</div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160; </div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    <span class="comment">// Calculate the minimizer of the quadratic that interpolates g_l and g_t</span></div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    <span class="comment">// Equation 2.4.5 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    <span class="keywordtype">double</span> a_s = a_l - (a_l - a_t) / (g_l - g_t) * g_l;</div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160; </div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    <span class="keywordtype">double</span> a_t_next;</div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160; </div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    <span class="keywordflow">if</span> (std::fabs (a_c - a_t) &lt; std::fabs (a_s - a_t))</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;      a_t_next = a_c;</div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;      a_t_next = a_s;</div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160; </div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <span class="keywordflow">if</span> (a_t &gt; a_l)</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;      <span class="keywordflow">return</span> (std::min (a_t + 0.66 * (a_u - a_t), a_t_next));</div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <span class="keywordflow">else</span></div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;      <span class="keywordflow">return</span> (std::max (a_t + 0.66 * (a_u - a_t), a_t_next));</div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  }</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;  <span class="comment">// Case 4 in Trial Value Selection [More, Thuente 1994]</span></div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;  {</div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    <span class="comment">// Calculate the minimizer of the cubic that interpolates f_u, f_t, g_u and g_t</span></div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <span class="comment">// Equation 2.4.52 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <span class="keywordtype">double</span> z = 3 * (f_t - f_u) / (a_t - a_u) - g_t - g_u;</div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;    <span class="keywordtype">double</span> w = std::sqrt (z * z - g_t * g_u);</div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    <span class="comment">// Equation 2.4.56 [Sun, Yuan 2006]</span></div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    <span class="keywordflow">return</span> (a_u + (a_t - a_u) * (w - g_u - z) / (g_t - g_u + 2 * w));</div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;  }</div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="ad006c7315b1f52de25efc41183c5ed60"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad006c7315b1f52de25efc41183c5ed60">&#9670;&nbsp;</a></span>updateDerivatives()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::updateDerivatives </td>
          <td>(</td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 1 &gt; &amp;&#160;</td>
          <td class="paramname"><em>score_gradient</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 6 &gt; &amp;&#160;</td>
          <td class="paramname"><em>hessian</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3d &amp;&#160;</td>
          <td class="paramname"><em>x_trans</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix3d &amp;&#160;</td>
          <td class="paramname"><em>c_inv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>compute_hessian</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute individual point contirbutions to derivatives of probability function w.r.t. the transformation vector. </p>
<dl class="section note"><dt>注解</dt><dd>Equation 6.10, 6.12 and 6.13 [Magnusson 2009]. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">score_gradient</td><td>the gradient vector of the probability function w.r.t. the transformation vector </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">hessian</td><td>the hessian matrix of the probability function w.r.t. the transformation vector </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">x_trans</td><td>transformed point minus mean of occupied covariance voxel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">c_inv</td><td>covariance of occupied covariance voxel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">compute_hessian</td><td>flag to calculate hessian, unnessissary for step calculation. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;{</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  Eigen::Vector3d cov_dxd_pi;</div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  <span class="comment">// e^(-d_2/2 * (x_k - mu_k)^T Sigma_k^-1 (x_k - mu_k)) Equation 6.9 [Magnusson 2009]</span></div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;  <span class="keywordtype">double</span> e_x_cov_x = exp (-gauss_d2_ * x_trans.dot (c_inv * x_trans) / 2);</div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  <span class="comment">// Calculate probability of transtormed points existance, Equation 6.9 [Magnusson 2009]</span></div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;  <span class="keywordtype">double</span> score_inc = -<a class="code" href="classpcl_1_1_normal_distributions_transform.html#a7b014c047dcf7fb8d5285e1cffeb125c">gauss_d1_</a> * e_x_cov_x;</div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160; </div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;  e_x_cov_x = gauss_d2_ * e_x_cov_x;</div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160; </div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;  <span class="comment">// Error checking for invalid values.</span></div>
<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;  <span class="keywordflow">if</span> (e_x_cov_x &gt; 1 || e_x_cov_x &lt; 0 || e_x_cov_x != e_x_cov_x)</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <span class="keywordflow">return</span> (0);</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160; </div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;  <span class="comment">// Reusable portion of Equation 6.12 and 6.13 [Magnusson 2009]</span></div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;  e_x_cov_x *= <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a7b014c047dcf7fb8d5285e1cffeb125c">gauss_d1_</a>;</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160; </div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160; </div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 6; i++)</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;  {</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="comment">// Sigma_k^-1 d(T(x,p))/dpi, Reusable portion of Equation 6.12 and 6.13 [Magnusson 2009]</span></div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    cov_dxd_pi = c_inv * <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a>.col (i);</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160; </div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    <span class="comment">// Update gradient, Equation 6.12 [Magnusson 2009]</span></div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    score_gradient (i) += x_trans.dot (cov_dxd_pi) * e_x_cov_x;</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160; </div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    <span class="keywordflow">if</span> (compute_hessian)</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    {</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; hessian.cols (); j++)</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;      {</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;        <span class="comment">// Update hessian, Equation 6.13 [Magnusson 2009]</span></div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;        hessian (i, j) += e_x_cov_x * (-gauss_d2_ * x_trans.dot (cov_dxd_pi) * x_trans.dot (c_inv * <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a>.col (j)) +</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;                                    x_trans.dot (c_inv * <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(3 * i, j)) +</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;                                    <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a>.col (j).dot (cov_dxd_pi) );</div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;      }</div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    }</div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;  }</div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160; </div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  <span class="keywordflow">return</span> (score_inc);</div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a9c6bd836040e430eea730cd6d16694f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c6bd836040e430eea730cd6d16694f9">&#9670;&nbsp;</a></span>updateHessian()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::updateHessian </td>
          <td>(</td>
          <td class="paramtype">Eigen::Matrix&lt; double, 6, 6 &gt; &amp;&#160;</td>
          <td class="paramname"><em>hessian</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3d &amp;&#160;</td>
          <td class="paramname"><em>x_trans</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Matrix3d &amp;&#160;</td>
          <td class="paramname"><em>c_inv</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Compute individual point contirbutions to hessian of probability function w.r.t. the transformation vector. </p>
<dl class="section note"><dt>注解</dt><dd>Equation 6.13 [Magnusson 2009]. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">hessian</td><td>the hessian matrix of the probability function w.r.t. the transformation vector </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">x_trans</td><td>transformed point minus mean of occupied covariance voxel </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">c_inv</td><td>covariance of occupied covariance voxel </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;{</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;  Eigen::Vector3d cov_dxd_pi;</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  <span class="comment">// e^(-d_2/2 * (x_k - mu_k)^T Sigma_k^-1 (x_k - mu_k)) Equation 6.9 [Magnusson 2009]</span></div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;  <span class="keywordtype">double</span> e_x_cov_x = gauss_d2_ * exp (-gauss_d2_ * x_trans.dot (c_inv * x_trans) / 2);</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160; </div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;  <span class="comment">// Error checking for invalid values.</span></div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;  <span class="keywordflow">if</span> (e_x_cov_x &gt; 1 || e_x_cov_x &lt; 0 || e_x_cov_x != e_x_cov_x)</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160; </div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;  <span class="comment">// Reusable portion of Equation 6.12 and 6.13 [Magnusson 2009]</span></div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;  e_x_cov_x *= <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a7b014c047dcf7fb8d5285e1cffeb125c">gauss_d1_</a>;</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160; </div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 6; i++)</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;  {</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    <span class="comment">// Sigma_k^-1 d(T(x,p))/dpi, Reusable portion of Equation 6.12 and 6.13 [Magnusson 2009]</span></div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    cov_dxd_pi = c_inv * <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a>.col (i);</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160; </div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; hessian.cols (); j++)</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    {</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;      <span class="comment">// Update hessian, Equation 6.13 [Magnusson 2009]</span></div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;      hessian (i, j) += e_x_cov_x * (-gauss_d2_ * x_trans.dot (cov_dxd_pi) * x_trans.dot (c_inv * <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a>.col (j)) +</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;                                  x_trans.dot (c_inv * <a class="code" href="classpcl_1_1_normal_distributions_transform.html#ad2250a36e3b63a879bac14df26272e4d">point_hessian_</a>.block&lt;3, 1&gt;(3 * i, j)) +</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;                                  <a class="code" href="classpcl_1_1_normal_distributions_transform.html#a03884aff71b4d6263ea6b4a3346b87b1">point_gradient_</a>.col (j).dot (cov_dxd_pi) );</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    }</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;  }</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160; </div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="acef200272607a40dc9890481f11c2480"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acef200272607a40dc9890481f11c2480">&#9670;&nbsp;</a></span>updateIntervalMT()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::updateIntervalMT </td>
          <td>(</td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>a_l</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>f_l</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>g_l</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>a_u</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>f_u</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>g_u</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>a_t</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>f_t</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>g_t</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Update interval of possible step lengths for More-Thuente method, <img class="formulaInl" alt="$ I $" src="form_37.png"/> in More-Thuente (1994) </p>
<dl class="section note"><dt>注解</dt><dd>Updating Algorithm until some value satifies <img class="formulaInl" alt="$ \psi(\alpha_k) \leq 0 $" src="form_38.png"/> and <img class="formulaInl" alt="$ \phi'(\alpha_k) \geq 0 $" src="form_39.png"/> and Modified Updating Algorithm from then on [More, Thuente 1994]. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">a_l</td><td>first endpoint of interval <img class="formulaInl" alt="$ I $" src="form_37.png"/>, <img class="formulaInl" alt="$ \alpha_l $" src="form_40.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">f_l</td><td>value at first endpoint, <img class="formulaInl" alt="$ f_l $" src="form_41.png"/> in Moore-Thuente (1994), <img class="formulaInl" alt="$ \psi(\alpha_l) $" src="form_42.png"/> for Update Algorithm and <img class="formulaInl" alt="$ \phi(\alpha_l) $" src="form_43.png"/> for Modified Update Algorithm </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">g_l</td><td>derivative at first endpoint, <img class="formulaInl" alt="$ g_l $" src="form_44.png"/> in Moore-Thuente (1994), <img class="formulaInl" alt="$ \psi'(\alpha_l) $" src="form_45.png"/> for Update Algorithm and <img class="formulaInl" alt="$ \phi'(\alpha_l) $" src="form_46.png"/> for Modified Update Algorithm </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">a_u</td><td>second endpoint of interval <img class="formulaInl" alt="$ I $" src="form_37.png"/>, <img class="formulaInl" alt="$ \alpha_u $" src="form_47.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">f_u</td><td>value at second endpoint, <img class="formulaInl" alt="$ f_u $" src="form_48.png"/> in Moore-Thuente (1994), <img class="formulaInl" alt="$ \psi(\alpha_u) $" src="form_49.png"/> for Update Algorithm and <img class="formulaInl" alt="$ \phi(\alpha_u) $" src="form_50.png"/> for Modified Update Algorithm </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">g_u</td><td>derivative at second endpoint, <img class="formulaInl" alt="$ g_u $" src="form_51.png"/> in Moore-Thuente (1994), <img class="formulaInl" alt="$ \psi'(\alpha_u) $" src="form_52.png"/> for Update Algorithm and <img class="formulaInl" alt="$ \phi'(\alpha_u) $" src="form_53.png"/> for Modified Update Algorithm </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">a_t</td><td>trial value, <img class="formulaInl" alt="$ \alpha_t $" src="form_54.png"/> in Moore-Thuente (1994) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">f_t</td><td>value at trial value, <img class="formulaInl" alt="$ f_t $" src="form_55.png"/> in Moore-Thuente (1994), <img class="formulaInl" alt="$ \psi(\alpha_t) $" src="form_56.png"/> for Update Algorithm and <img class="formulaInl" alt="$ \phi(\alpha_t) $" src="form_57.png"/> for Modified Update Algorithm </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">g_t</td><td>derivative at trial value, <img class="formulaInl" alt="$ g_t $" src="form_58.png"/> in Moore-Thuente (1994), <img class="formulaInl" alt="$ \psi'(\alpha_t) $" src="form_59.png"/> for Update Algorithm and <img class="formulaInl" alt="$ \phi'(\alpha_t) $" src="form_60.png"/> for Modified Update Algorithm </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>if interval converges </dd></dl>
<div class="fragment"><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;{</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;  <span class="comment">// Case U1 in Update Algorithm and Case a in Modified Update Algorithm [More, Thuente 1994]</span></div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;  <span class="keywordflow">if</span> (f_t &gt; f_l)</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;  {</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    a_u = a_t;</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    f_u = f_t;</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    g_u = g_t;</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  }</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;  <span class="comment">// Case U2 in Update Algorithm and Case b in Modified Update Algorithm [More, Thuente 1994]</span></div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;  <span class="keywordflow">if</span> (g_t * (a_l - a_t) &gt; 0)</div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  {</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    a_l = a_t;</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    f_l = f_t;</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    g_l = g_t;</div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;  }</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;  <span class="comment">// Case U3 in Update Algorithm and Case c in Modified Update Algorithm [More, Thuente 1994]</span></div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;  <span class="keywordflow">if</span> (g_t * (a_l - a_t) &lt; 0)</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;  {</div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    a_u = a_l;</div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    f_u = f_l;</div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    g_u = g_l;</div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160; </div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    a_l = a_t;</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    f_l = f_t;</div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    g_l = g_t;</div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">false</span>);</div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;  }</div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;  <span class="comment">// Interval Converged</span></div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;  <span class="keywordflow">else</span></div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <span class="keywordflow">return</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">类成员变量说明</h2>
<a id="aa87d6f6163465d5952f385120819169b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa87d6f6163465d5952f385120819169b">&#9670;&nbsp;</a></span>h_ang_a2_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Vector3d <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::h_ang_a2_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Precomputed Angular Hessian </p>
<p>The precomputed angular derivatives for the hessian of a transformation vector, Equation 6.19 [Magnusson 2009]. </p>

</div>
</div>
<a id="a583433afdfb7aa6e817fb5603753b3f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a583433afdfb7aa6e817fb5603753b3f3">&#9670;&nbsp;</a></span>j_ang_a_</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointSource , typename PointTarget &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Eigen::Vector3d <a class="el" href="classpcl_1_1_normal_distributions_transform.html">pcl::NormalDistributionsTransform</a>&lt; PointSource, PointTarget &gt;::j_ang_a_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Precomputed Angular Gradient </p>
<p>The precomputed angular derivatives for the jacobian of a transformation vector, Equation 6.19 [Magnusson 2009]. </p>

</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>registration/include/pcl/registration/<a class="el" href="ndt_8h_source.html">ndt.h</a></li>
<li>registration/include/pcl/registration/impl/<a class="el" href="ndt_8hpp_source.html">ndt.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><a class="el" href="classpcl_1_1_normal_distributions_transform.html">NormalDistributionsTransform</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
